C# 使用Json.Net序列化时忽略空字典和父属性
我有以下代码:C# 使用Json.Net序列化时忽略空字典和父属性,c#,json.net,C#,Json.net,我有以下代码: var data = new { name = "Jon Doe", properties = new { homes = new Dictionary<string, string>() }, age = 34 } var settings = new JsonSerializerSettings { ContractResolver = new MyResolver() }; var serial
var data = new {
name = "Jon Doe",
properties = new
{
homes = new Dictionary<string, string>()
},
age = 34
}
var settings = new JsonSerializerSettings {
ContractResolver = new MyResolver()
};
var serializationResult = JsonConvert.SerializeObject(data, settings)
我的问题是序列化的json结果如下:
{
"name": "Jon Doe",
"properties": {},
"age": 34
}
但是我想去掉属性“properties”:{}
,这意味着我想获得json
{
"name": "Jon Doe",
"age": 34
}
我尝试过不成功地删除此类属性,这些属性在删除其子项后会变为空,我如何才能做到这一点?
实例
已经是指定的类型。您可以简单地施放:
instance =>
{
var value = (IDictionary)instance;
return value != null && value.Keys.Count() > 0
};
如果行得通,试试看。如果没有,请与debug一起检查value
的内容并发回
编辑:我知道这是关于嵌套属性的。请提供继承类的代码。
实例
已经是指定的类型。您可以简单地施放:
instance =>
{
var value = (IDictionary)instance;
return value != null && value.Keys.Count() > 0
};
如果行得通,试试看。如果没有,请与debug一起检查value
的内容并发回
编辑:我知道这是关于嵌套属性的。请提供继承类的代码。您正在忽略此处的空字典(homes属性),是否要忽略该类的父级?是否尝试使用设置。NullValueHandling=NullValueHandling.Ignore;我有DTO,它可能在任何深度级别都有嵌套属性,即字典。我想根据某些条件删除该Dictionary属性,如果在该操作后某些父属性结果为空,我也想删除它们。我尝试了settings.NullValueHandling=NullValueHandling.Ignore,但是我不想忽略所有默认值。那么,如何定义要排除的属性呢?您正在忽略此处的空字典(即
homes
属性),是否要忽略该属性的父级?是否尝试使用设置。NullValueHandling=NullValueHandling.ignore;我有DTO,它可能在任何深度级别都有嵌套属性,即字典。我想根据某些条件删除字典属性,如果在该操作后某些父属性结果为空,我也想删除它们。我尝试了设置。NullValueHandling=NullValueHandling.Ignore,但我不想忽略所有默认值。那么,如何定义要排除的属性?