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,但我不想忽略所有默认值。那么,如何定义要排除的属性?