JsonConvert-强制MissingMember为null

时间:2019-04-29 14:02:41

标签: c# serialization .net-core json.net

我有一个FilterDto类,用于将过滤器信息发送到客户端应用程序。 例如:

public class FilterDto
{
    public string Code { get; set; } = "Default code";
    public string Description { get; set; }
}

这被序列化为:

[
    {
        field: 'Code',
        type: 'text',
        defaultValue: 'Default code'
    },
    {
        field: 'Description ',
        type: 'text',
        defaultValue: null
    }
]

因此,在我的客户端中,我可以为给定字段渲染两个input text。当用户过滤返回的JSON时,就像这样:

{
    Code: 'code to filter',
    Description: 'description to filter'
}

我将其反序列化为:

var filter = JsonConvert.DeserializeObject(json, typeof(FilterDto));
Console.WriteLine(filter.Code); // code to filter

问题是,如果用户决定删除代码的默认值,在上面的示例中,我将使用JSON:

{
    Description: 'description to filter'
}

反序列化时,我将拥有:

var filter = JsonConvert.DeserializeObject(json, typeof(FilterDto));
Console.WriteLine(filter.Code); // Default code

当JSON中缺少Code时,是否可以将Lasso设置为null而不是默认值?

谢谢

2 个答案:

答案 0 :(得分:2)

尝试一下:

        public class FilterDto
        {
            private const string DefaultValue = "Default code";

            [OnDeserialized]
            internal void OnDeserializedMethod(StreamingContext context)
            {
                if (Code == DefaultValue)
                {
                    Code = null; //set to null or string.empty
                }
            }

            public string Code { get; set; } = DefaultValue;
            public string Description { get; set; }
        }

答案 1 :(得分:0)

我相信,您正在寻找的内容已经得到了here

的解释

此外,如果该属性不存在,则可以添加

[JsonProperty(PropertyName ="defaultValue", NullValueHandling = NullValueHandling.Include, DefaultValueHandling = DefaultValueHandling.Populate)]

此外,本文还将使您了解如何覆盖空值:here