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

C# 序列化一个类的对象并设置另一个类的属性,c#,serialization,C#,Serialization,我试图理解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 C

我试图理解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();    
      }
}
[可序列化]
公共班级1{
Class2 c2=新的Class2();
公开名单2{
获取{return c2.Arr1;}
设置{c2.Arr1=value;}
} 
[XmlIgnore]
公共2级C2{
获取{返回c2;}
设置{c2=value;}
}
公共类别1(){
}
}
公共课2{
私人名单arr1;
公共列表Arr1{
获取{return arr1;}
设置{arr1=value;}
}
公共类别2(){
arr1=(新的double[5]).ToList();
}
}
每次反序列化class1的xml文件时,Arr2中的值都是零,而不是xml文件中的值。我使用以下行进行反序列化:

public Class1 c1 = new Class1 () ;
XElement rootnode = XElement.Load( path );
c1 = rootnode.XmlDeserialize<Class1>( "Class1" );
public Class1 c1=new Class1();
XElement rootnode=XElement.Load(路径);
c1=rootnode.xml反序列化(“Class1”);
Xml文件:

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

1.
2.
3.
4.
5.

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

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

这对我很有用:

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

Serializable
属性仅由
BinaryFormatter
使用。XMLSerializer不关心它。我坚持更正。这是否意味着示例代码中
Class1
上的
Serializable
属性是不必要的来自哪里?我在任何地方都找不到任何文档。我只能假设它是您的项目中定义的扩展方法。你应该包括它,如果有人要否决投票,那么请留下评论,以表明我犯了错误。这是我谦虚的请求。谢谢