JSON.Net反序列化填充缺少的属性

时间:2015-11-26 08:09:43

标签: c# json json.net deserialization

我想将json对象反序列化为c#类,并且即使我的JSON缺少信息,也会有一个完全填充的默认对象。我试过了

  • 使用[DefaultValue]
  • 进行注释
  • 为类创建构造函数
  • 使用设置对象进行反序列化

设置对象:

new JsonSerializerSettings {
    DefaultValueHandling = DefaultValueHandling.Populate
    NulValueHandling = NullValueHandling.Include
    ObjectCreationHandling = ObjectCreationHandling.Replace
}

考虑这些c#类

public class Root{
    public SpecialProperty name {get;set;}
    public SpecialProperty surname {get;set;}
}

public class SpecialProperty {
    string type {get;set;}
    string value {get;set;}
}

考虑这个JSON

"Root" : {
    "name" : { 
        "type" : "string",
        "value": "MyFirstname"
    }
}

如何将此json反序列化为一个对象,并将可用数据序列化为一个新对象,并将缺少的属性设置为string.empty

2 个答案:

答案 0 :(得分:0)

一种解决方案可能是反序列化为对象X,将默认值存储到对象Y中,然后使用类似AutoMapper的内容将非空值映射到X.

答案 1 :(得分:0)

最简单的解决方法是在构造函数中添加所需的默认值。

public class Root
{
    public SpecialProperty Name { get; set; }
    public SpecialProperty Surname { get; set; }

    public Root()
    {
        this.Name = SpecialProperty.GetEmptyInstance();
        this.Surname = SpecialProperty.GetEmptyInstance();
    }
}

public class SpecialProperty
{
    public string Name { get; set; }
    public string Type { get; set; }

    public static SpecialProperty GetEmptyInstance()
    {
         return new SpecialProperty
         {
              Name = string.Empty,
              Type = string.Empty
         };
    }
}