物业的内部二传手可以被序列化? [英] Can an internal setter of a property be serialized?
本文介绍了物业的内部二传手可以被序列化?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
有没有办法在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>
这篇关于物业的内部二传手可以被序列化?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文