首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JsonConverter解析引用

JsonConverter解析引用
EN

Stack Overflow用户
提问于 2018-02-14 22:30:34
回答 1查看 349关注 0票数 3

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

代码语言:javascript
复制
if (reader.TokenType == JsonToken.Null) return null;

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

或者我们必须实现一个自定义的ReferenceResolver,因为默认情况下它不能在转换器中使用(仅供内部使用)?

欢迎提出任何建议。

EN

回答 1

Stack Overflow用户

发布于 2018-02-14 23:55:26

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

解决方案:

代码语言:javascript
复制
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
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48789626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档