Eri*_*tas 10 .net c# initialization default-value datacontractserializer
如果我正在序列化并稍后反序列化类,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;
}
}
Run Code Online (Sandbox Code Playgroud)
ale*_*dej 10
您可以使用序列化回调.将以下方法添加到Person类:
[OnDeserialized]
void OnDeserialized(StreamingContext context)
{
this.IsNew = true;
}
Run Code Online (Sandbox Code Playgroud)
另一种选择是删除[DataContract]和[DataMember]属性.在这种情况下,DCSerializer将在反序列化时调用构造函数.
| 归档时间: |
|
| 查看次数: |
2356 次 |
| 最近记录: |