2017-01-19 98 views
1

我已經在我的課如何忽略XmlSerializer反序列化期間只讀屬性集?

[XmlIgnore] 
public string Amount 
{ 
    get { return "Some value"; } 
} 

只讀屬性當我嘗試從文件反序列化對象,我不希望出現這種情況反序列化去拋出異常,我沒有收到對象。我試過使用xml忽略屬性,但它不能幫助我。只有我需要設置我的文件中存在的屬性。

XML文件

<?xml version="1.0" encoding="utf-8"?> 
<Class xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <Id>1</KaumeheId> 
    <PrivaatKey>123</PrivaatKey> 
</Class> 

public class Class 
{ 
    public int Id { get; set; } 
    public string PrivaatKey { get; set; } 
    public string Amount 
    { 
     get { return "Some value"; } 
    } 
} 

串行

public static class XmlDeserializerService<T> 
{ 
    public static void LoadDataToClass(T obj, string filePath) 
    { 

     XmlSerializer serializer = new XmlSerializer(typeof(T)); 
     using (FileStream fileStream = new FileStream(filePath, FileMode.Open)) 
     { 
      obj = (T) serializer.Deserialize(fileStream); 
     } 
    } 
} 

附加信息(修改):

如果我看在調試器obj.Amount下我有金額=「obj.Amount」投擲型System.NullReferenceException

+0

您是否嘗試過[XmlAttributeOverrides(https://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlattributeoverrides(V = vs.110)的.aspx )類來查看它的行爲是否有所不同? – Carson

+0

Whar是你的例外嗎?您的示例適用於您的xml(如果您更正了xml中的Id標記) –

+2

XmlIgnoreAttribute應該起作用,因爲XML將絕對忽略只讀屬性,並且應該僅根據XML中定義的內容創建對象。有關異常的更多細節會很好。 – Tatranskymedved

回答

2

的例外,我認爲這個問題是在你的反序列化方法,我要改變它返回對象:

public static class XmlDeserializerService<T> 
{ 
    public static T LoadDataToClass(string filePath) 
    {  
     XmlSerializer serializer = new XmlSerializer(typeof(T)); 
     using (FileStream fileStream = new FileStream(filePath, FileMode.Open)) 
     { 
      return (T)serializer.Deserialize(fileStream); 
     } 
    } 
} 

我的班級是:

public class Class 
{ 
    public int Id { get; set; } 
    public string PrivaatKey { get; set; } 
    public string Amount 
    { 
     get { return "Some value"; } 
    } 
} 

如果我以後使用它:

var r = XmlDeserializerService<Class>.LoadDataToClass(@"yourxml"); 

我看到的所有字段:

enter image description here

這樣的作品,如果你將有一個有效的XML,一個您提供具有無效的ID標籤。有效的一種是:

<?xml version="1.0" encoding="utf-8"?> 
<Class xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <Id>1</Id> 
    <PrivaatKey>123</PrivaatKey> 
</Class> 
+0

您描述了一半的問題。另一半=提供的XML不正確。 OP應該用這個''''''' – tym32167

+0

@ tym32167替換這個'''是的,當然,我已經在評論中寫了它,但是你說得對,我會更新爲 –

+0

是啊。對不起,沒有看到它。 – tym32167

相關問題