我想将复杂的JSON表示/转换为C#字典。
JSON是
{
"58": { "Power": 26, "Mantissa": 58},
"59": { "Power": 27, "Mantissa": 59},
"60": { "Power": 28, "Mantissa": 60},
"64": { "Power": 0, "Mantissa": 64},
"65": { "Power": 0, "Mantissa": 64},
"66": { "Power": 1, "Mantissa": 65}
}
我认为它可以用C#中的字典词典表示,如
Dictionary<string, List<Dictionary<string, int>>> dict = new Dictionary<string, List<Dictionary<string, int>>>();
我不知道如何实现这个数据结构。 请帮忙。
答案 0 :(得分:4)
JSON.NET将能够反序列化你的json:
var dict = JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string,int>>>(json);
你很接近,但你错过了那个外部词典应该有string
作为关键类型。
虽然我认为使用Dictionary<string,int>
作为外部字典值类型并不是很好的决定:
Power
和Mantissa
值的智能感知功能。其他开发人员不会猜测他们应该在字典中查找哪些键。错误输入错误 Matnissa 而非尾数。将其与自定义类用法进行比较:
public class Number
{
public int Power { get; set; }
public int Mantissa { get; set; }
}
解析几乎相同:
var numbers = JsonConvert.DeserializeObject<Dictionary<string, Number>>(json);
但访问价值要简单得多,速度更快:
numbers["60"].Mantissa // numbers["60"]["Manitssa"].Value
答案 1 :(得分:3)
试试吧:
public class YourObject{
public int Power {get;set;}
public int Mantissa {get;set;}
}
之后,您可以使用Json.NET将JSON转换为YourObject列表:
List<YourObject> list = JsonConvert.DeserializeObject<List<YourObject>>(yourJSONString);
答案 2 :(得分:0)
public class YourObject
{
public int Power { get; set; }
public int Mantissa { get; set; }
}
然后试试这个:
var x = JsonConvert.DeserializeObject<Dictionary<string, YourObject>>(richTextBox1.Text);