gpt4 book ai didi

c# - 反序列化使得字段是一个空列表而不是 null

转载 作者:可可西里 更新时间:2023-11-01 08:43:03 25 4
gpt4 key购买 nike

如果我有这样的类(class):

[DataContract(Name = "", Namespace = "")]
public class MyDataObject
{
[DataMember(Name = "NeverNull")]
public IList<int> MyInts { get; set; }
}

当反序列化以下字符串时,有没有一种方法可以使 MyInts 字段成为非空空列表?

string serialized = @"{""NeverNull"":null}";

MyDataObject myDataObject = JsonConvert.DeserializeObject<MyDataObject>(serialized);

我正在使用 Newtonsoft.Json

我问的原因是我有一个相当复杂的 json 请求要解析,它包含对象列表的嵌套,我想要反序列化代码来创建这些对象,这样我就可以避免大量的空检查:

if (foo.bar != null)
{
foreach (var bar in foo.bar)
{
if (bar.baz != null)
{
foreach (var baz in bar.baz)
{
...

最佳答案

也许添加一个序列化后回调在反序列化结束时检查这个?

[DataContract(Name = "", Namespace = "")]
public class MyDataObject
{
[OnDeserialized]
public void OnDeserialized(StreamingContext context)
{
if (MyInts == null) MyInts = new List<int>();
}
[DataMember(Name = "NeverNull")]
public IList<int> MyInts { get; set; }
}

另请注意,JsonConvert(与 DataContractSerializer 不同)执行默认构造函数,因此通常您也可以只添加一个默认构造函数:

    public MyDataObject()
{
MyInts = new List<int>();
}

但是,在这种情况下,explict "NeverNull":null 在反序列化期间将其更改回 null,因此我使用了上面的回调。

关于c# - 反序列化使得字段是一个空列表而不是 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11946531/

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