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中…请查看以下链接: