gpt4 book ai didi

c# - 如何删除json中的附加键

转载 作者:太空宇宙 更新时间:2023-11-03 23:14:50 24 4
gpt4 key购买 nike

我有这样的课:

public class Province
{
public string name { get; set; }
public List<Province> Cities { get; set; }
public virtual Province parent { get; set; }

public Province()
{
Cities = new List<Province>();
}
}

我有这个类的列表,我想把它转换成 Json,我使用了这段代码,它很好:

  string output=   JsonConvert.SerializeObject(provinces, Formatting.None,
new JsonSerializerSettings()
{
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
});

我的结果如下:

[{"name":"ProvinceName","Cities":[{"name":"CityName","Cities":[]}],"parent":null},

我想删除没有任何子项的城市 key :

[{"name":"ProvinceName","Cities":[{"name":"CityName"}],"parent":null},

我该怎么做?

最佳答案

您可以使用 DefaultValueHandlingNullValueHandling。看看这个page和示例(如果您的列表未在构造函数中初始化,这将起作用)。或者,您可以编写自己的转换器来做其他事情,这些事情不是开箱即用的。

这是来自 page 的修改示例.这段代码应该做你想做的。不过,我还没有测试过。

public class ShouldSerializeContractResolver : DefaultContractResolver
{
public new static readonly ShouldSerializeContractResolver Instance = new ShouldSerializeContractResolver();
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
{
JsonProperty property = base.CreateProperty(member, memberSerialization);
if (property.DeclaringType == typeof(List<Province>) && property.PropertyName == "Cities")
{
property.ShouldSerialize =
instance =>
{
Province province = (Province)instance;
return province.Cities != null && province.Cities.Count > 0;
};
}

return property;
}
}

序列化您的对象时指定此契约解析器。

string json = JsonConvert.SerializeObject(
provinces,
Formatting.None,
new JsonSerializerSettings
{
ContractResolver = new ShouldSerializeContractResolver()
});

关于c# - 如何删除json中的附加键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37563782/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com