有没有办法在C#中一个内部setter序列化的属性? 据我所知,这可能是有问题的 - 但是,如果有一种方法 - 我想知道
。示例:
[Serializable接口]
公共类Person
{
公众诠释ID {获得;内部设置; }
公共字符串名称{;组; }
公众诠释年龄{获得;组; }
}
code序列化的类的实例的个人的:
人员的人=新的Person();
person.Age = 27;
person.Name =帕特里克;
person.ID = 1;
XmlSerializer的序列化=新的XmlSerializer(typeof运算(人));
TextWriter的作家=新的StreamWriter(@C:的test.xml);
serializer.Serialize(作家,人);
writer.Close();
结果(缺少ID属性):
< XML版本=1.0编码=UTF-8&GT?;
<人的xmlns:XSI =http://www.w3.org/2001/XMLSchema-instance
的xmlns:XSD =http://www.w3.org/2001/XMLSchema>
<名称>&帕特里克LT; /名称>
<年龄> 27< /年龄>
< /人>
解决方案
如果它是一个选项,的DataContractSerializer
(.NET 3.0)可序列化非公共属性:
[DataContract]
公共类Person
{
[数据成员]
公众诠释ID {获得;内部设置; }
[数据成员]
公共字符串名称{;组; }
[数据成员]
公众诠释年龄{获得;组; }
}
...
静态无效的主要()
{
人人=新的Person();
person.Age = 27;
person.Name =帕特里克;
person.ID = 1;
DataContractSerializer的序列化=新的DataContractSerializer(typeof运算(人));
XmlWriter的作家= XmlWriter.Create(@C:的test.xml);
serializer.WriteObject(作家,人);
writer.Close();
}
随着XML(重新格式化):
< XML版本=1.0编码=UTF-8&GT?;
<人的xmlns:I =http://www.w3.org/2001/XMLSchema-instance
的xmlns =http://schemas.datacontract.org/2004/07/>
<年龄> 27< /年龄>
< ID> 1< / ID>
<名称>&帕特里克LT; /名称>
< /人>
Is there any way to serialize a property with an internal setter in C#? I understand that this might be problematic - but if there is a way - I would like to know.
Example:
[Serializable]
public class Person
{
public int ID { get; internal set; }
public string Name { get; set; }
public int Age { get; set; }
}
Code that serializes an instance of the class 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();
Result (missing the ID property):
<?xml version="1.0" encoding="utf-8"?>
<Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Name>Patrik</Name>
<Age>27</Age>
</Person>
解决方案
If it is an option, DataContractSerializer
(.NET 3.0) can serialize non-public properties:
[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();
}
With the xml (re-formatted):
<?xml version="1.0" encoding="utf-8"?>
<Person xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://schemas.datacontract.org/2004/07/">
<Age>27</Age>
<ID>1</ID>
<Name>Patrik</Name>
</Person>