Json解串器

时间:2015-03-14 15:47:16

标签: c# json.net deserialization

我目前正在与json进行我的第一次陡峭,并且很好地完成了混乱。 我找到了许多如何反序列化json文件的例子,但没有任何帮助我。

{
   "102": {
      "id": 102,
      "name": "cvmember3",
      "profileIconId": 28,
      "revisionDate": 1373593599000,
      "summonerLevel": 1
   },
   "101": {
      "id": 101,
      "name": "IS1ec76a704e9b52",
      "profileIconId": -1,
      "revisionDate": 1355466175000,
      "summonerLevel": 1
   }

}

这是我得到的json i对象,问题是愚蠢的去除它。 我到现在为止做了什么:

            String name= (string) new JavaScriptSerializer().Deserialize<Dictionary<String, object>>(json)["name"];

我错过了索引,并且不知道如何添加它 任何人,可以说我反序列化的正确行,我有权访问libary json.net

2 个答案:

答案 0 :(得分:1)

或者,您可以为要返回的数据定义一个类,然后将您的JSON解析为类似这样的字典:

public class DataClass
{
    public int id;
    public string name;
    public int profileIconId;
    public long revisionDate;
    public int summonerLevel;
}

然后

Dictionary<int, DataClass> myDictionary = JsonConvert.DeserializeObject<Dictionary<int, DataClass>>(json);
string foundName = myDictionary[102].name;

答案 1 :(得分:0)

如果您只需要字符串中的一个项目(i only need to get one arttribut),则可以使用NewtonSoft来删除所需的项目:

using Newtonsoft.Json.Linq;

// read from where ever
string jstr = File.ReadAllText("C:\\Temp\\101.json");

JObject js = JObject.Parse(jstr);
var data102 = js["102"]["name"];       // == "cvmember3"

var data101 = js["101"]["name"];           // == "IS1ec76a704e9b52"

Console.WriteLine("Name for 101 is '{0}'", data101.ToString());
Console.WriteLine("Name for 102 is '{0}'", data102.ToString());

输出:

  

101的名称是&#39; IS1ec76a704e9b52&#39;
  102的名称是&#39; cvmember3&#39;

这是获取一个项目值的快速方法,但它假设您知道它的外观和存储位置。