如果我使用 DataContractSerializer
序列化并稍后反序列化一个类,我如何控制未序列化的属性的初始值?
考虑下面的 Person
类。它的数据协定设置为序列化 FirstName
和 LastName
属性,但不序列化 IsNew
属性。我希望 IsNew
初始化为 TRUE,无论是将新 Person 实例化为新实例还是从文件反序列化。
这很容易通过构造函数完成,但据我所知,DataContractSerializer
不会调用构造函数,因为它们可能需要参数。
[DataContract(Name="Person")]
public class Person
{
[DataMember(Name="FirstName")]
public string FirstName { get; set; }
[DataMember(Name = "LastName")]
public string LastName { get; set; }
public bool IsNew { get; set; }
public Person(string first, string last)
{
this.FirstName = first;
this.LastName = last;
this.IsNew = true;
}
}
最佳答案
实际上,正确的做法是使用 OnDeserializing 属性(注意“ing”后缀)。在反序列化成员值之前调用标有该属性的方法。
关于c# - 使用 DataContractSerializer 时设置属性的初始值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2725988/