c# - 使用 DataContractSerializer 时设置属性的初始值

标签 c# .net initialization default-value datacontractserializer

如果我使用 DataContractSerializer 序列化并稍后反序列化一个类,我如何控制未序列化的属性的初始值?

考虑下面的 Person 类。它的数据协定设置为序列化 FirstNameLastName 属性,但不序列化 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/

相关文章:

c# - 生成总和大于提供值的随机但均匀部分的列表

c++ - 整数计数{0}。我可以在 C++ 中使用花括号初始化变量吗?

dart - 如何从构造函数初始化列表中的常量构造函数访问属性?

c# - 反序列化具有不同命名空间的 xml 文件

c# - 使用linq查找不相交的数据集

c# - C# 类库中对象的类、方法、变量大小写/名称的最佳实践是什么?

c# - 如何获取最后一个错误(WSAGetLastError)?

c# - MVC ajax 形式的嵌套对象在 Controller 中捕获

c# - 如何递归返回直接对象中 'toy' 项目的数量以及该对象的所有直接子对象

java - 初始化包含对象数组的 Java 对象实例