物业的内部二传手可以被序列化?物业、序列化、二传

2023-09-02 01:52:29 作者:痛、谁枯萎了谁的一切

有没有办法在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();
 
2万可买人才购房资格 买一套新房 净赚上百万 内幕曝光 多部门已出手...

结果(缺少ID属性):

 < XML版本=1.0编码=UTF-8&GT?;
<人的xmlns:XSI =htt​​p://www.w3.org/2001/XMLSchema-instance
        的xmlns:XSD =htt​​p://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 =htt​​p://www.w3.org/2001/XMLSchema-instance
        的xmlns =htt​​p://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>