【问题标题】:Does XML Serialization Require Properties to be Read/Write?XML 序列化是否需要读取/写入属性?
【发布时间】:2009-07-20 17:20:35
【问题描述】:

我正在课堂上测试 XML 序列化,但我注意到运行程序时 ID 号没有保存。

所以我环顾四周并修改了一些东西,但没有任何效果,然后我看到除了 ID 之外的所有字段都有 get 和 set 属性。所以我加了一套;财产到我的身份证号码和噗它的工作。 问题是,是否必须设置?并得到;对我的所有属性起作用以使 XML 序列化起作用?

我不希望在创建对象(自动生成)后修改 ID 号。

【问题讨论】:

    标签: c# properties xml-serialization


    【解决方案1】:

    是的,这基本上是对 XML 序列化的限制。来自XML Serialization docs

    只有公共属性和字段可以 被序列化。属性必须有 公共访问器(获取和设置 方法)。如果必须序列化 非公开数据,使用 BinaryFormatter 类而不是 XML 序列化。

    XML 序列化并不像人们想象的那么灵活。

    【讨论】:

    • 我注意到他没有提到他使用的是哪个版本的框架。这在 .NET 3.5 中没有改变吗?
    • 虽然这可能是来自 MSDN 的逐字引用,但我不一定会提倡 BinarySerializer 作为以前选择 xml 的场景的替代方案...
    【解决方案2】:

    请注意,如果您想将非公共数据序列化为 xml,DataContractSerializer 可能会有用。没有XmlSerializer灵活(而且不能指定属性),但是可以序列化非公开数据:

    [DataContract]
    public class Person {
        [DataMember]
        private int id;
    
        public int Id {get {return id;}} // immutable
    
        public Person(int id) { this.id = id; }
    
        [DataMember]
        public string Name {get;set;} // mutable
    }
    

    还要注意,它不使用您的构造函数...或者实际上是 any 构造函数 - 它作弊,允许它创建一个对象并在之后填充数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-17
      • 2011-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多