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

DataContractJsonSerializer的反序列化问题分享

时间:2023-04-10 23:31:51 C#

DataContractJsonSerializer的反序列化问题我有如下JSON:[{"name":"numToRetrieve","value":"3","label":"Numberofitemstoretrieve:",“项目”:{“1”:“1”,“3”:“3”,“5”:“5”},“规则”:{“范围”:“1-2”}},{“name":"showFoo","value":"on","label":"显示foo?"},{"name":"title","value":"Foo","label":"Foo:"}]全部在一行版本中(适用于字符串文字):[{"name":"numToRetrieve""value":"3","label":"要检索的项目数:","items":{"1":"1","3":"3","5":"5"},"rules":{"range":"1-2"}},{"name":"showFoo","value":"on","label":"Showfoo?"},{"name":"title","value":"Foo","label":"Foo:"}]在上面的例子中,name、value和label是必需的,但是items和rules是可选的。这是我尝试图反序列化的类:usingSystem.Collections;使用System.Collections.Generic;使用System.Runtime.Serialization;namespacefoofoo{[DataContract]publicsealedclassFooDef{[DataMember(Name="name",IsRequired=true)]publicstringName{get;放;}[DataMember(Name="value",IsRequired=true)]publicstringValue{get;放;}[DataMember(Name="label",IsRequired=true)]publicstringLabel{get;放;}[DataMember(Name="items",IsRequired=false)]publicDictionaryItems{get;放;}[DataMember(Name="rules",IsRequired=false)]publicDictionaryRules{get;放;}}}这是我使用来反序列化的代码:varjson=newDataContractJsonSerializer(typeof(List));varbar="[{"name":"numToRetrieve","value":"3","label":"要检索的项目数:","items":{"1":"1","3":"3","5":"5"},"rules":{"range":"1-2"}},{"name":"showFoo","value":"on","label":"显示foo?"},{"name":"title","value":"Foo","label":"Foo:"}]";varstream=newMemoryStream(编码.UTF8.GetBytes(bar));varfoo=json.ReadObject(流);stream.Close();一切都非常顺利,除了第一个FooDef传递的项目和规则是空的我已经在阳光下尝试过并填充它们:自定义类,NameValueCollection,KeyValuePair,后者的列表以及似乎适用的所有其他集合。[编辑:我忘了尝试Hashtable,它似乎是一个明显的候选者。没工作。]如我所见,问题在于项目和规则下的关键部分是开放式的。也就是说,它并不总是称为范围或3。有什么建议或想法吗?恕我直言,无法使用DataContractJsonSerializer反序列化您提供给.NET类的JSON字符串。问题来自DataContractJsonSerializer序列化字典的方式。您可以使用其他序列化程序,如Json.NET(我强烈推荐)或JavaScriptSerializer(我认为它已被弃用,而不是DataContractJsonSerializer,但它适用于您的场景)。你也可以阅读这些咆哮。文档:序列化集合-Json.NEThttp://social.msdn.microsoft.com/Forums/en-US/wcf/thread/071f73bb-e141-4a68-ae61-05635382934f查看这篇文章-它几乎完美地解决了我的问题问题。我不得不将它们的Object[]类型更改为String,但我只使用String:String类型的键/值对,所以没问题。以上就是C#学习教程的全部内容:DataContractJsonSerializer的反序列化问题。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权请点击右侧联系管理员删除。如需转载请注明出处: