gpt4 book ai didi

c# - Newtonsoft Json.NET 可以跳过序列化空列表吗?

转载 作者:IT王子 更新时间:2023-10-29 03:51:12 24 4
gpt4 key购买 nike

我正在尝试序列化一些“懒惰创建”各种列表的遗留对象。我无法更改遗留行为。

我把它归结为这个简单的例子:

public class Junk
{
protected int _id;

[JsonProperty( PropertyName = "Identity" )]
public int ID
{
get
{
return _id;
}

set
{
_id = value;
}
}

protected List<int> _numbers;
public List<int> Numbers
{
get
{
if( null == _numbers )
{
_numbers = new List<int>( );
}

return _numbers;
}

set
{
_numbers = value;
}
}
}

class Program
{
static void Main( string[] args )
{
Junk j = new Junk( ) { ID = 123 };

string newtonSoftJson = JsonConvert.SerializeObject( j, Newtonsoft.Json.Formatting.Indented );

Console.WriteLine( newtonSoftJson );

}
}

目前的结果是:{ “身份”:123, “数字”:[]

我想得到:{ “身份”:123

也就是说,我想跳过任何列表、集合、数组或类似的空东西。

最佳答案

如果您没有找到解决方案,the answer当您设法找到它时,它非常简单。

如果允许扩展原始类,则向其添加 ShouldSerializePropertyName 函数。这应该返回一个 bool 值,指示是否应该为类的当前实例序列化该属性。在您的示例中,这可能看起来像这样(未经测试,但您应该得到图片):

public bool ShouldSerializeNumbers()
{
return _numbers.Count > 0;
}

这种方法适用于我(尽管是在 VB.NET 中)。如果您不允许修改原始类,则可以使用链接页面上描述的 IContractResolver 方法。

关于c# - Newtonsoft Json.NET 可以跳过序列化空列表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11320968/

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