我有一个自定义的jsonConverter,该verconverter可以在避难所期间处理派生类型的创建,在大多数情况下,这是按预期工作的。当JSON结构中有引用对象时,我遇到问题的情况是。当我们检测到参考时,是否可以依靠默认的避难所化?读取方法应该返回什么?在下面的示例中,我们在参考时返回null。
if (reader.TokenType == JsonToken.Null) return null;
var jObject = JObject.Load(reader);
JToken token;
if (jObject.TryGetValue("$ref", out token))
{
return null;
}
或我们必须实现自定义参考文献,因为默认一个不能在转换器中使用(仅内部使用(?
欢迎任何建议。
经过一些额外的测试,我自己找到了解决方案。当我第一次尝试使用默认的参考文献效果时,我得到了一个例外,说" 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
}