序列化一个类的对象并设置另一个类的属性

本文关键字:设置 另一个 属性 对象 一个 序列化 | 更新日期: 2023-09-27 18:13:49

我正在尝试理解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中得到零,而不是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>

序列化一个类的对象并设置另一个类的属性

需要将[Serializable]属性添加到class2

好吧,从评论中,我可以看出我错了。

这个为我工作:

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