使用NewtonsoftJson.Net反序列化为IEnumerable类我有一个项目目前正在使用Json.Net反序列化Json的类,如下}publicclassFoo{publicGuidFooGuid{get;放;}公共字符串名称{得到;放;}公共列表栏{get;放;}}publicclassBar{publicGuidBarGuid{get;放;}公共字符串描述{得到;放;到目前为止它工作正常。为了使迭代更容易,我让类Foo像这样实现IEnumerable:publicclassFoo:IEnumerable{publicGuidFooGuid{get;放;}公共字符串名称{得到;放;}公共列表栏{get;放;}publicIEnumeratorGetEnumerator(){returnBars.GetEnumerator();}IEnumeratorIEnumerable.GetEnumerator(){返回GetEnumerator();}}publicclassBar{publicGuidBarGuid{get;放;}公共字符串描述{得到;放;}}但它不能反序列化对象。该错误令人困惑,因为它表示无法反序列化FooGuid字段,但删除IEnumerable接口再次起作用。在模拟器或设备的MonoTouch和MonoDroid环境中,问题是相同的。有关于如何使用其工作的任何线索吗?添加了重现在问题的代码:publicstaticclassTests{publicstaticvoidSerializeAndDeserializeFoo(){//序列化和反序列化Foo类varelement=newFoo{FooGuid=Guid.NewGuid(),Name="Fooname",Bars=newList{newBar{BarGuid=Guid.NewGuid(),Description="Bardescription"},newBar{BarGuid=Guid.NewGuid(),Description="Bardescription"},newBar{BarGuid=Guid.NewGuid(),Description="Bardescription"}}};varserializedObject=JsonConvert.SerializeObject(元素);Console.WriteLine("序列化的Foo元素:{0}",serializedObject);//如果Foo实现了IEnumerable则异常vardeserializedObject=JsonConvert.DeserializeObject(serializedObject);Console.WriteLine("Foo反序列化成功了!");}publicstaticvoidSerializeAndDeserializeEnumerableFoo(){//序列化和反序列化Foo类varelement=newEnumerableFoo{FooGuid=Guid.NewGuid(),Name="Fooname",Bars=newList{newBar{BarGuid=Guid.NewGuid(),Description="Bardescription"},newBar{BarGuid=Guid.NewGuid(),Description="Bardescription"},newBar{BarGuid=Guid.NewGuid(),Description="Bar描述”}}};varserializedObject=JsonConvert.SerializeObject(元素);Console.WriteLine("序列化的EnumerableFoo元素:{0}",serializedObject);try{//如果Foo实现了IEnumerable则异常vardeserializedObject=JsonConvert.DeserializeObject(serializedObject);Console.WriteLine("EnumerableFoo反序列化成功了!");}catch(Exceptione){Console.WriteLine("EnumerableFoo反序列化失败!");扔;}}}publicclassEnumerableFoo:IEnumerable{publicGuidFooGuid{get;放;}公共字符串名称{得到;放;}公共列表栏{get;放;}publicIEnumeratorGetEnumerator(){returnBars.GetEnumerator();}IEnumeratorIEnumerable.GetEnumerator(){返回GetEnumerator();}}publicclassFoo{publicGuidFooGuid{get;放;}民众}公共列表栏{get;放;}}publicclassBar{publicGuidBarGuid{get;放;}公共字符串描述{得到;放;示例项目:https://www.dropbox.com/s/27i58aiz71dylkw/IEnumerableJson.zip从Json.Net文档到:IEnumerable、列表和数组.NET列表(从IEnumerable继承的类型)和.NET数组到JSON数组因为JSON数组只支持一系列值andnot支持属性,因此不会序列化在.NET集合上声明的任何其他属性和字段。在不需要JSON数组的情况下,可以将JsonObjectAttribute放在实现IEnumerable的.NET类型上,以强制将该类型序列化为JSON对象。换句话说,由于您的类实现了IEnumerable,因此Json.Net认为它是一个列表。要解决此问题,只需使用[JsonObject]属性装饰您的类。这将强制Json.Net将其序列化和反序列化为普通类,这正是您在本例中想要的。以上就是C#学习教程:使用NewtonsoftJson.Net反序列化成IEnumerable类全部内容分享。如果对大家有用,需要进一步了解C#学习教程,希望大家多加关注——[JsonObject]publicclassEnumerableFoo:IEnumerable{...}本文收集自网络,不代表立场.如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
