【问题标题】:Serialization of object of one class and setting properties of other class一个类的对象的序列化和其他类的属性设置
【发布时间】:2013-05-15 15:49:56
【问题描述】:

我试图了解 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>

【问题讨论】:

  • XElement.XmlDeserialize&lt;Class1&gt;( "Class1" ); 来自哪里?我在任何地方都找不到任何文档。我只能假设它是您项目中定义的扩展方法。你应该包括它
  • 如果有人要投反对票,请留下评论以指出我犯的错误。这是我卑微的要求。谢谢

标签: c# serialization


【解决方案1】:

您需要将[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 属性是不必要的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-11
  • 1970-01-01
  • 1970-01-01
  • 2012-02-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多