gpt4 book ai didi

json.net - JsonConverter 解析引用

转载 作者:行者123 更新时间:2023-12-04 16:46:35 25 4
gpt4 key购买 nike

我有一个自定义的 JsonConverter,它在反序列化期间处理派生类型的创建,在大多数情况下,这会按预期工作。我遇到问题的情况是,当 json 结构中有引用对象时。当我们检测到引用时是否可以依赖默认的反序列化? ReadJson 方法应该返回什么?在下面的示例中,我们在引用的情况下返回 null。

if (reader.TokenType == JsonToken.Null) return null;

var jObject = JObject.Load(reader);
JToken token;
if (jObject.TryGetValue("$ref", out token))
{
return null;
}

或者我们必须实现一个自定义的 ReferenceResolver 作为默认的 ReferenceResolver 不能在转换器中使用(仅限内部使用)?

欢迎提出任何建议。

最佳答案

经过一些额外的测试,我自己找到了解决方案。当我第一次尝试使用默认的 ReferenceResolver 时,我得到一个异常,提示“DefaultReferenceResolver 只能在内部使用。”。这指出了我错误的方向,您可以在转换器中使用 DefaultReferenceResolver,但我以错误的方式调用它...

解决方法:

public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
if (reader.TokenType == JsonToken.Null) return null;
var jObject = JObject.Load(reader);
string id = (string)jObject["$ref"];
if (id != null)
{
return serializer.ReferenceResolver.ResolveReference(serializer, id);
}
// Custom instance creation comes here
}

关于json.net - JsonConverter 解析引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48789626/

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