Newtonsoft反序列化含$type的JSON时触发JsonReaderException求助
解决Newtonsoft.Json反序列化含$type元数据的object属性报错问题
问题原因
你的Data类标记了[JsonConstructor]的构造函数中,SourceData参数被定义为string类型,但实际序列化的是List<int>对象。反序列化时,Newtonsoft.Json会优先使用该构造函数,它尝试将带有$type元数据的复杂对象解析为字符串——而解析器预期字符串以引号开头,实际却遇到了对象的{符号,因此抛出JsonReaderException。
解决方案
修改构造函数的SourceData参数类型,使其与类中对应属性的object类型保持一致:
[JsonConstructor] public Data(string Source = "", object SourceData = null, bool IsActive = false, bool IsClickable = true) { this.IsActive = IsActive; this.Source = Source; this.SourceData = SourceData; this.IsClickable = IsClickable; }
修改后,配合已配置的TypeNameHandling.Auto,反序列化时会正确识别$type元数据,将SourceData还原为原本的List<int>对象。
验证
重新运行代码,反序列化后的dataDes.SourceData会是List<int>类型,包含元素1、2、3,且不会再抛出异常。
内容的提问来源于stack exchange,提问作者Logane Ramez
相关产品推荐
相关产品推荐

