当前位置:  开发笔记 > 编程语言 > 正文

可以序列化属性的内部setter吗?

如何解决《可以序列化属性的内部setter吗?》经验,为你挑选了2个好方法。

有没有办法在C#中使用内部setter序列化属性?
我知道这可能有问题 - 但如果有办法 - 我想知道.

例:

[Serializable]
public class Person
{
    public int ID { get; internal set; }
    public string Name { get; set; }
    public int Age { get; set; }
}

序列化类Person实例的代码:

Person person = new Person();
person.Age = 27;
person.Name = "Patrik";
person.ID = 1;

XmlSerializer serializer = new XmlSerializer(typeof(Person));
TextWriter writer = new StreamWriter(@"c:\test.xml");
serializer.Serialize(writer, person);
writer.Close();

结果(缺少ID属性):



  Patrik
  27

Marc Gravell.. 54

如果是一个选项,DataContractSerializer(.NET 3.0)可以序列化非公共属性:

[DataContract]
public class Person
{
    [DataMember]
    public int ID { get; internal set; }
    [DataMember]
    public string Name { get; set; }
    [DataMember]
    public int Age { get; set; }
}
...
static void Main()
{
    Person person = new Person();
    person.Age = 27;
    person.Name = "Patrik";
    person.ID = 1;

    DataContractSerializer serializer = new DataContractSerializer(typeof(Person));
    XmlWriter writer = XmlWriter.Create(@"c:\test.xml");
    serializer.WriteObject(writer, person);
    writer.Close();
}

使用xml(重新格式化):



    27
    1
    Patrik


Darin Dimitr.. 5

你可以实现IXmlSerializable,遗憾的是这否定了XmlSerializer最重要的好处(声明性地控制序列化的能力).DataContractSerializer(基于xml)和BinaryFormatter(基于二进制)可以用作XmlSerializer的替代品,每个都有其优点和缺点.



1> Marc Gravell..:

如果是一个选项,DataContractSerializer(.NET 3.0)可以序列化非公共属性:

[DataContract]
public class Person
{
    [DataMember]
    public int ID { get; internal set; }
    [DataMember]
    public string Name { get; set; }
    [DataMember]
    public int Age { get; set; }
}
...
static void Main()
{
    Person person = new Person();
    person.Age = 27;
    person.Name = "Patrik";
    person.ID = 1;

    DataContractSerializer serializer = new DataContractSerializer(typeof(Person));
    XmlWriter writer = XmlWriter.Create(@"c:\test.xml");
    serializer.WriteObject(writer, person);
    writer.Close();
}

使用xml(重新格式化):



    27
    1
    Patrik



2> Darin Dimitr..:

你可以实现IXmlSerializable,遗憾的是这否定了XmlSerializer最重要的好处(声明性地控制序列化的能力).DataContractSerializer(基于xml)和BinaryFormatter(基于二进制)可以用作XmlSerializer的替代品,每个都有其优点和缺点.

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有