DataContractSerializer中缺少数据成员的缺省值

Oli*_*Oli 4 .net c# datacontractserializer

使用DataContract中的以下两个数据成员然后使用DataContractSerializer,只有Name按预期序列化.我的问题是我反序列化文件."名称"被正确读取和加载,但由于"超时"不存在,我希望它保持默认的"TimeSpan.FromHours(12)".实际上发生了什么是DataContractSerializer分配一个值,但由于它没有分配值,它使用的时间跨度默认值为0.这个行为有什么问题吗?

private string _name;
    [DataMember(Name = "Name")]
    public string Name
    {
        get
        {
            return _name;
        }
        set
        {
            _name= value;
        }
    }

    private TimeSpan _timeout = TimeSpan.FromHours(12);
    public TimeSpan Timeout
    {
        get
        {
            return _timeout ;
        }
        set
        {
            _timeout = value;
        }
    }
Run Code Online (Sandbox Code Playgroud)

Dav*_*nce 5

这是你的答案吗?

使用OnDeserialized

[OnDeserialized]
void OnDeserialized(StreamingContext context)
{
    this._timeout = TimeSpan.FromHours(12);
}
Run Code Online (Sandbox Code Playgroud)

从此处设置使用DataContractSerializer时属性的初始值

  • 像魅力一样工作 - 除了我必须使用属性[OnDeserializing]来设置序列化开始之前的值.然后,如果需要,将覆盖默认值. (4认同)