C# JsonConvert-强制将MissingMember设置为null

C# JsonConvert-强制将MissingMember设置为null,c#,serialization,.net-core,json.net,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', defaultValu

我有一个
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
    }
]
因此,在我的客户机中,我可以为给定字段呈现两个
输入
文本。当用户过滤时,返回的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
时,有没有办法将其设置为null而不是默认值

谢谢

试试这个:

        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; }
        }
试试这个:

        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; }
        }

我相信,你所看到的已经解释清楚了

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

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

另外,本文将告诉您如何覆盖空值:

我相信,您所看到的内容已经解释过了

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

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

此外,本文还将告诉您如何覆盖空值:

这是可行的,但我希望有更通用的方法。。。不必为每个
FilterDto
编写逻辑,我已经。。。目前我正在使用一些反射将值设置为默认值,如果它们不在json中…请查看此链接:这是可行的,但我希望有更通用的。。。不必为每个
FilterDto
编写逻辑,我已经。。。目前,我正在使用一些反射将值设置为默认值,如果它们不在json中…请查看以下链接: