在 C# 中反序列化时,如何在类型继承之前优先考虑 Newtonsoft 的对象引用解析?

问题描述

我同时需要对象继承(使用 [JsonConverter(typeof(JsonInheritanceConverter),"_type")])和对象引用(使用 JsonSerializerSetting.TypeNameHandling = Auto)。序列化工作正常,但反序列化以异常结束。

简化示例:

    [JsonConverter(typeof(JsonInheritanceConverter),"_type")]
    [KNownType(typeof(BaseClass))]
    [KNownType(typeof(DerivedClass))]
public class BaseClass{public List<BaseClass> Ancestors{get;set;}}

public class DerivedClass : BaseClass{public string Name{get;set;}}

序列化后的样子:

{
  [
    {
      "$id": "1","Ancestors": [],"_type": "BaseClass"
    },{
      "$id": "2","Name": "A","Ancestors": [{ "$ref": "1"}],"_type": "DerivedClass"
    }
  ]
}

在反序列化期间,TraceWriter 通知

... InvalidOperationException 而“反序列化 System.Collections.ObjectModel.ObservableCollection`1[BaseClass] 时出错。无法找到带有鉴别符 '' 的 'BaseClass' 的子类型。路径 'Ancestors[0]'.': 找不到带有鉴别符 '' 的 'BaseClass' 的子类型。在 njsonSchema.Converters.JsonInheritanceConverter.GetdiscriminatorType(JObject jObject,Type objectType,String discriminatorValue)

它不是首先解析 "$ref" = "1"(见下文:"Ancestors": [{ "$ref": "1"}]),而是首先搜索我的 "_type": "BaseClass",不存在供参考。在我看来,$ref 应该优先于 _type。

我该如何解决这个问题?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)