
正如其他人已经指出的那样,未获得预期结果的原因是因为JSON与尝试反序列化的类结构不匹配。您需要更改JSON或更改类。由于其他人已经展示了如何更改JSON,因此在这里我将采用相反的方法。
为了与您在问题中发布的JSON相匹配,您的类应按照以下定义。注意,我进行了以下更改:
- 我
Wrapper
在您的JSON中添加了与外部对象相对应的类。 - 我改变了
Values
对财产ValueSet
类从一个List<Value>
到Dictionary<string, Value>
,因为values
在你的JSON属性包含的对象,而不是一个数组。 - 我添加了一些其他
[JsonProperty]
属性来匹配JSON对象中的属性名称。
类定义:
class Wrapper{ [JsonProperty("JsonValues")] public ValueSet ValueSet { get; set; }}class ValueSet{ [JsonProperty("id")] public string Id { get; set; } [JsonProperty("values")] public Dictionary<string, Value> Values { get; set; }}class Value{ [JsonProperty("id")] public string Id { get; set; } [JsonProperty("diaplayName")] public string DisplayName { get; set; }}您需要反序列化到
Wrapper类中,而不是在
ValueSet类中。然后,您可以
ValueSet从获取
Wrapper。
var valueSet = JsonConvert.DeserializeObject<Wrapper>(jsonString).ValueSet;
这是一个工作程序来演示:
class Program{ static void Main(string[] args) { string jsonString = @" { ""JsonValues"": { ""id"": ""MyID"", ""values"": { ""value1"": { ""id"": ""100"", ""diaplayName"": ""MyValue1"" }, ""value2"": { ""id"": ""200"", ""diaplayName"": ""MyValue2"" } } } }"; var valueSet = JsonConvert.DeserializeObject<Wrapper>(jsonString).ValueSet; Console.WriteLine("id: " + valueSet.Id); foreach (KeyValuePair<string, Value> kvp in valueSet.Values) { Console.WriteLine(kvp.Key + " id: " + kvp.Value.Id); Console.WriteLine(kvp.Key + " name: " + kvp.Value.DisplayName); } }}这是输出:
id: MyIDvalue1 id: 100value1 name: MyValue1value2 id: 200value2 name: MyValue2
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)