gpt4 book ai didi

c# - Newtonsoft JsonConvert.DeserializeObject 如何忽略空对象

转载 作者:行者123 更新时间:2023-11-30 20:17:15 66 4
gpt4 key购买 nike

我有以下类定义:

public class Tag
{
public Guid? TagId { get; set; }
public string TagText { get; set; }
public DateTime CreatedOn { get; set; }
}

public class Wiki
{
public Guid? WikiId { get; set; }
public string WikiText { get; set; }
public string Title { get; set; }
public DateTime CreatedOn { get; set; }
public IEnumerable<Tag> Tags { get; set; }
}

从数据库中我得到以下 json 对象:

{
"WikiId": "83981284-0AD3-4420-90AB-15E3BF6BD7B7",
"WikiText": "Text",
"Title": "Title",
"CreatedOn": "2017-08-07T09:16:06.0800000",
"Tags": [{}] // <-- here i would like to ignore the empty Tag object
}

当我现在做 JsonConvert.DeserializeObject<Wiki>(json)我得到一个 Wiki 对象,其中包含 1 个标签的列表,其值为 TagId: null, TagText: null and CreatedOn: "0001-01-01T00:00:00"

有没有办法在反序列化时忽略空的 Tag 对象?我尝试了几个 JsonSerializerSettings,但没有任何帮助。

最佳答案

您可以使用自定义 JsonConverter 在反序列化期间忽略空对象。像这样的东西可以工作:

class IgnoreEmptyItemsConverter<T> : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType.IsAssignableFrom(typeof(List<T>));
}

public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
List<T> list = new List<T>();
JArray array = JArray.Load(reader);
foreach (JObject obj in array.Children<JObject>())
{
if (obj.HasValues)
{
list.Add(obj.ToObject<T>(serializer));
}
}
return list;
}

public override bool CanWrite
{
get { return false; }
}

public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}

要使用转换器,只需将 [JsonConverter] 属性添加到您的 Tags 属性,如下所示:

public class Wiki
{
...
[JsonConverter(typeof(IgnoreEmptyItemsConverter<Tag>))]
public IEnumerable<Tag> Tags { get; set; }
}

fiddle :https://dotnetfiddle.net/hrAFsh

关于c# - Newtonsoft JsonConvert.DeserializeObject 如何忽略空对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45572652/

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