gpt4 book ai didi

c# - 用于格式错误的 JSON 的自定义 JSON 反序列化器

转载 作者:行者123 更新时间:2023-11-30 21:34:06 25 4
gpt4 key购买 nike

我正在尝试反序列化一些格式不正确的 JSON。当结果数据存在时,我以以下格式取回:

[
{
"jsonrpc": "2.0",
"result": {
"17449": {
"data": {
"id": "17449",
"type_title": "Relation"
},
"children": false
},
"17451": {
"data": {
"id": "17451",
"type_title": "Relation"
},
"children": false
},
"19059": {
"data": {
"id": "19059",
"type_title": "Relation"
},
"children": false
}
},
"error": null,
"id": 5
}
]

当没有结果数据时,我得到:

[
{
"jsonrpc": "2.0",
"result": [],
"error": null,
"id": 5
}
]

所以当我获取数据时,我可以将其解析为 Dictionary<string,dataObject>但是当我返回一个空数组时,Jsson Deserializer 会抛出一个异常,试图将空数组反序列化为字典。

我知道我需要重写 ReadJson 方法,但我不太确定如何识别空数组以及如果找到空数组要返回什么。

这是我所在的地方:

public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
object retVal = new Object();
if (reader.TokenType == JsonToken.StartArray)
{
#Somehow identify an empty array and return the right object (an empty Dictionary)
}
else
{
retVal = serializer.Deserialize(reader, objectType);
}
return retVal;
}

我可以使用一些帮助来完成 ReadJson 以满足我的需求。

最佳答案

按照优先顺序,以下是您应该如何解决此问题:

  1. 尝试改变输出,这意味着构造此 json 的人应该决定他们是否要返回数组或字典,而不是两者
  2. 使用自定义反序列化器

这是自定义反序列化器,请注意,当它检测到一个数组时,它只是假定该数组为空,它不会以任何方式尝试反序列化数组的内容。

public class DictionaryOrEmptyArray : JsonConverter
{
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JToken token = JToken.Load(reader);
if (token.Type == JTokenType.Array)
return new Dictionary<string, dataObject>();
return token.ToObject<Dictionary<string, dataObject>>();
}

public override bool CanConvert(Type objectType) => objectType == typeof(Dictionary<string, dataObject>);
public override bool CanWrite => false;
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) => throw new NotImplementedException();
}

您可以像这样将其附加到您的属性(property):

[JsonConverter(typeof(DictionaryOrEmptyArray))]
public Dictionary<string, dataObject> Result { get; set; }

关于c# - 用于格式错误的 JSON 的自定义 JSON 反序列化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50638522/

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