当前位置: 首页 > 编程语言 > C#

使用newtonsoft.json反序列化List分享

时间:2023-04-11 02:12:02 C#

C#学习教程:使用newtonsoft.json反序列化列表我用JsonProperty(ItemTypeNameHandling=TypeNameHandling.Auto)修饰了list参数,得到了这样的输出:但是我反序列化的时候,一直说他不能反序列化抽象类。http://james.newtonking.com/json/help/index.html?topic=html/SerializeTypeNameHandling.htmpublicclassConcreteClass{privateObservableCollection_Nodes=newObservableCollection();//publicObservableCollectionNodes{get{returnthis._Nodes;}}公共字符串名称{得到;放;}publicintId{得到;放;}}publicabstractclassAbstractClass{privateObservableCollection_Nodes=newObservableCollection();.Auto)]publicObservableCollectionNodes{get{returnthis._Nodes;}}}删除它的注释行!根据文档,确保在反序列化时指定TypeNameHandling://为了安全起见,反序列化Stockholder时需要TypeNameHandlingnewStockholder=JsonConvert.DeserializeObject(jsonTypeNameAuto,newJsonSerializerSettings{TypeNameHandling=TypeNameHandling.Auto});值得注意的是,该文档正在反序列化优化一个包含抽象类集合的具体类。作为一个实验,尝试创建一个一次性类(具体),该类具有一个带有抽象对象列表的属性,看看您是否可以对其进行序列化和反序列化。更新:我刚在LINQPad中测试了以下代码:voidMain(){vartest=newList();test.Add(新酒店{Name="Hilton",Stars=5});test.Add(newPool{Name="BigSplash",Capacity=500});测试.转储();字符串json=JsonConvert.SerializeObject(测试,Newtonsoft.Json.Formatting.Indented,新JsonSerializerSettings{TypeNameHandling=TypeNameHandling.All});json.转储();varbusinesses=JsonConvert.DeserializeObject>(json,newJsonSerializerSettings{TypeNameHandling=TypeNameHandling.All});企业转储();}//在这里定义其他方法和类publicabstractclassBusiness{publicstringName{get;set;}}publicclassHotel:商务{publicintStars{get;set;}}publicclassPool:Business{publicintCapacity{get;set;}}它工作得很好。抽象集合序列化为:{"$type":"System.Collections.Generic.List`1[[UserQuery+Business,query_jvrdcu]],mscorlib","$values":[{"$type":"UserQuery+Hotel,query_jvrdcu","Stars":5,"Name":"Hilton"},{"$type":"UserQuery+Pool,query_jvrdcu","Capacity":500,"Name":"BigSplash"}]}原始和反序列化的集合匹配。以上就是C#学习教程:使用newtonsoft.json反序列化List共享的所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。涉及侵权,请点击维权联系管理员删除。如需转载请注明出处: