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

如何将Json数组转换为c#中的对象列表分享

时间:2023-04-10 21:23:20 C#

C#学习教程:C#中如何将Json数组转换为对象列表"values":{"value1":{"id":"100","diaplayName":"MyValue1"},"value2":{"id":"200","diaplayName":"MyValue2"}}}我想将Json字符串转换为以下类classValueSet{[JsonProperty("id")]publicstringid{get;放;}[JsonProperty("values")]publicListvalues{get;放;}}classValue{publicstringid{get;放;}publicstringDiaplayName{get;放;我的反序列化代码是JavaScriptSerializerjs=newJavaScriptSerializer();StreamReadersr=newStreamReader(@"ValueSetJsonString.txt");字符串jsonString=sr.ReadToEnd();varitems=JsonConvert.DeserializeObject(jsonString);但是在序列化之后我得到了空值,我该如何解决这个问题?正如其他人已经指出的那样,您没有获得预期结果的原因是您的JSON与您尝试反序列化的类结构不匹配。您需要更改JSON或更改类。由于其他人已经展示了如何更改JSON,因此我将执行相反的操作。为了匹配您在问题中发布的JSON,您的类应定义如下。请注意,我做了以下更改:我在JSON中添加了一个与外部对象对应的Wrapper类。我把ValueSet类的Values属性从List改成了Dictionary,因为JSON中的values属性包含的是对象,不是数组。我添加了一些额外的[JsonProperty]属性来匹配JSON对象中的属性名称。类定义:classWrapper{[JsonProperty("JsonValues")]publicValueSetValueSet{get;放;}}classValueSet{[JsonProperty("id")]publicstringId{get;放;}[JsonProperty("values")]publicDictionaryValues{get;放;}}classValue{[JsonProperty("id")]publicstringId{get;放;}[JsonProperty("diaplayName")]publicstringDisplayName{get;放;您需要反序列化为Wrapper类,而不是ValueSet类。然后您可以从包装器中获取ValueSet。varvalueSet=JsonConvert.DeserializeObject(jsonString).ValueSet;这是一个演示的工作程序:":{""value1"":{""id"":""100"",""diaplayName"":""MyValue1""},""value2"":{""id"":""200"",""diaplayName"":""MyValue2""}}}}";varvalueSet=JsonConvert。反序列化对象(jsonString)。值集;安慰。WriteLine("id:"+valueSet.Id);foreach(KeyValuePairkvpinvalueSet.Values){Console.WriteLine(kvp.Key+"id:"+kvp.Value.Id);Console.WriteLine(kvp.Key+"名称:"+kvp.Value.DisplayName);这是输出:id:MyIDvalue1id:100value1name:MyValue1value2id:200value2name:MyValue2http://json2csharp.com/我发现上面的链接非常有用,因为它更正了我的C#类从实际返回的JSON生成它们。然后我调用:JsonConvert.DeserializeObject(jsonString);一切都按预期工作。您的数据结构和JSON不匹配。您的JSON是这样的:{"JsonValues":{"id":"MyID",...}}但您尝试将其序列化为的数据结构是:classValueSet{[JsonProperty("id")]public字符串ID{得到;放;}...}你跳过了一个步骤:你的JSON是一个类,它有一个名为JsonValues的属性,它以ValueSet数据结构的对象作为值。在你的类中,你的JSON看起来像这样:"values":{...}你的数据结构像这样:[JsonProperty("values")]publicListvalues{get;放;}请注意,在JSON中,{..}定义了一个对象,其中[..]定义了一个数组。所以,根据你的JSON,你没有一堆值,但你有一个值对象,其属性值value1和value2类型为Value。由于反序列化器需要一个数组而不是获取一个对象,因此它可以做的最不具有破坏性的事情(异常):跳过该值。您的属性值保留其默认值:null。如果可以:调整你的JSON。以下适合您的数据结构,可能是您真正想要的:{"id":"MyID","values":[{"id":"100","diaplayName":"MyValue1"},{"id":"200","diaplayName":"MyValue2"}]}你检查过这条线是完美的并且你的字符串有价值吗?字符串jsonString=sr.ReadToEnd();如果是,请在最后一行尝试此代码:ValueSetitems=JsonConvert.DeserializeObject(jsonString);或者如果你有一个json数组,你可以使用这样的列表:Listitems=JsonConvert.DeserializeObject>(jsonString);祝你好运,你有一个不匹配的jSon字符串,如果你想转换成列表,试试这个{"id":"MyID","values":[{"id":"100","diaplayName":"MyValue1",},{"id":"200","diaplayName":"MyValue2",}]}这也是可能的:usingSystem.Web.Helpers;varlistOfObjectsResult=Json.Decode>(JsonData);您可以使用Json.Net框架来执行此操作。像这样:Accountaccount=JsonConvert.DeserializeObject(json);首页:http://json.codeplex.com/这方面的文档:http://james.newtonking.com/json/help/index.html#以上是C#学习教程:如何将Json数组转换为对象列表在C#中分享的所有内容,如果对大家有用,需要了解更多C#学习教程,希望大家多多关注~本文来自网络收集,不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: