首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将复杂的json表示为C#字典

如何将复杂的json表示为C#字典
EN

Stack Overflow用户
提问于 2017-04-03 14:52:12
回答 3查看 857关注 0票数 0

我想将复杂的JSON表示/转换为C#字典。

杰森

代码语言:javascript
复制
{
"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#中的字典来表示

代码语言:javascript
复制
    Dictionary<string, List<Dictionary<string, int>>> dict = new Dictionary<string, List<Dictionary<string, int>>>();

我不知道如何实现这种数据结构。请帮帮忙。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-04-03 15:05:22

JSON.NET将能够反序列化您的json:

代码语言:javascript
复制
var dict = JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string,int>>>(json);

您已经接近了,但是您忽略了外部字典应该以string作为键类型。

虽然我认为使用Dictionary<string,int>作为外部字典值类型不是很好的决定:

  • 您将丢失IntelliSense的Power值和Mantissa值。其他开发人员不会猜测他们应该在字典中查找哪些键。没有错误输入Matnissa而不是尾数。
  • 你会得到字典内部的负担(条目的桶,大小的计数器等)
  • 与访问自定义对象的属性相比,您的代码将缓慢工作(应该计算字符串的哈希代码,然后选择适当的存储项,然后迭代桶项以从字典中获得值)。

将其与自定义类的用法进行比较:

代码语言:javascript
复制
public class Number
{
    public int Power { get; set; }
    public int Mantissa { get; set; }
}

解析几乎是一样的:

代码语言:javascript
复制
var numbers = JsonConvert.DeserializeObject<Dictionary<string, Number>>(json);

但是访问值要简单得多,速度更快:

代码语言:javascript
复制
numbers["60"].Mantissa // numbers["60"]["Manitssa"].Value
票数 4
EN

Stack Overflow用户

发布于 2017-04-03 14:58:47

就试着:

代码语言:javascript
复制
public class YourObject{
     public int Power {get;set;}
     public int Mantissa {get;set;}
}

之后,可以使用Json.NET将JSON转换为YourObject列表:

代码语言:javascript
复制
List<YourObject> list = JsonConvert.DeserializeObject<List<YourObject>>(yourJSONString);
票数 3
EN

Stack Overflow用户

发布于 2017-04-03 15:05:54

太简单了。首先,我们需要这样的对象:

代码语言:javascript
复制
public class YourObject
{
    public int Power { get; set; }
    public int Mantissa { get; set; }
}

那就试试这个:

代码语言:javascript
复制
    var x = JsonConvert.DeserializeObject<Dictionary<string, YourObject>>(richTextBox1.Text);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43187818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档