问题描述
我同时需要对象继承(使用 [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 (将#修改为@)