繁体   English   中英

Json解串器

[英]Json deserializer

即时通讯目前使我的第一个陡峭的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对象,问题是即时通讯将其反序列化。 我到目前为止一直在尝试:

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

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

另外,您可以为要返回的数据定义一个类,然后将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;

如果您只想从字符串中选择一项( 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的名称是“ IS1ec76a704e9b52”
102的名称为'cvmember3'

这是一种仅获取一项值的快速方法,但它假设您知道它的外观以及存储位置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM