2013-05-15 39 views
-2

我想了解C#中的xml序列化/反序列化行爲。我用下面的示例代碼工作:一個類的對象的序列化和其他類的屬性的設置

[Serializable] 
public class Class1 { 
    Class2 c2 = new Class2(); 

    public List<double> Arr2 { 
     get { return c2.Arr1 ;} 
     set { c2.Arr1 = value ;} 
    } 
    [XmlIgnore] 
    public Class2 C2 { 
     get { return c2; } 
     set { c2 = value; } 
    } 

    public Class1() { 
    } 
} 

public class Class2 { 
    private List<double> arr1; 

    public List<double> Arr1 { 
     get { return arr1; } 
     set { arr1 = value; } 
    } 

    public Class2() { 
     arr1 = (new double[ 5 ]).ToList();  
     } 
} 

每次當我反序列化類class1的xml文件,我在ARR2得到0遊XML文件中的值來代替。我使用下面的線反序列化:

public Class1 c1 = new Class1() ; 
XElement rootnode = XElement.Load(path); 
c1 = rootnode.XmlDeserialize<Class1>("Class1"); 

XML文件:

<Class1> 
<Arr2> 
    <double>1</double> 
    <double>2</double> 
    <double>3</double> 
    <double>4</double> 
    <double>5</double> 
</Arr2> 
</Class1> 
+0

哪裏是'XElement.XmlDeserialize ( 「1類」);從'來了嗎?我無法在任何地方找到任何文檔。我只能假設它是你的項目中定義的擴展方法。你應該包括它 –

+0

如果有人要投票,然後請留下一個意見,以表明我犯的錯誤。這是我謙卑的要求。謝謝 – User1551892

回答

1

您需要的[Serializable]屬性添加到class2

好的,從評論中我可以看出我錯了。

這爲我工作:

XElement rootnode = XElement.Load(path); 
var serializer = new System.Xml.Serialization.XmlSerializer(typeof(Class1)); 
var c1 = (Class1)serializer.Deserialize(rootnode.CreateReader()); 
+0

'Serializable'屬性只能由'BinaryFormatter'使用。 XMLSerializer不關心它。 –

+0

我站好了。這是否意味着示例代碼中'Class1'上的'Serializable'屬性是不必要的? –

+0

是的,沒錯。 –

相關問題