如何从json文件中提取数据

时间:2017-02-10 06:40:57

标签: c# json list

我有一个这种格式的json文件

{
 "myserver": {
  "readonly": false,
  "slaveonly": false
  },
 "dateChanged": true,
 "pid": "3875",

"data-mode": {
"version": 461329,
"mode": "delta",
"Jobs" : { 
           "job-mode": "full",
            "1" : { id : 100, description : "descritpion 1" },
            "2" : { id : 200, description : "descritpion 1" },
            "3" : { id : 300, description : "descritpion 1" }
          }
 }
 }

我有一个名为Job

的类
public class Job
{
    public string Id {get;set;}
    public string Desc {get;set;}

}

我需要将所有工作列表作为IList 来自json字符串。

我需要读取Jobs标签(1,2,3)中的所有值。我在这里做了一些工作。

using (StreamReader r = new StreamReader(@"10022017.json"))
        {
            string json = r.ReadToEnd();
            dynamic obj  = JsonConvert.DeserializeObject(json);

            //obj.
            // var xx = ((Newtonsoft.Json.Linq.JArray)((Newtonsoft.Json.Linq.JProperty)(new System.Collections.Generic.Mscorlib_CollectionDebugView<Newtonsoft.Json.Linq.JToken>(((Newtonsoft.Json.Linq.JObject)((Newtonsoft.Json.Linq.JProperty)(new System.Collections.Generic.Mscorlib_CollectionDebugView<Newtonsoft.Json.Linq.JToken>(((Newtonsoft.Json.Linq.JObject)obj).ChildrenTokens).Items[14])).Value).ChildrenTokens).Items[6])).Value).ChildrenTokens;

            var jObj = JObject.Parse(json);
            var data = jObj.Descendants()
                .OfType<JProperty>()
                .Where(p => p.Name == "jobs");

            foreach (var item in data.Descendants())
            {

            }

        }  

不知道如何为每一行获取价值并转换为某些类。

帮助将不胜感激。

感谢

1 个答案:

答案 0 :(得分:2)

是的,你的错误是“工作”| “作业” ..

你可以使用作为替代品。

        var jObj = JObject.Parse(jsonText); ;
        var jobs = jObj["data-mode"]["Jobs"];
        var result = jobs.OfType<JProperty>().Where((a,b)=>{
            int key = 0;
            return int.TryParse(a.Name,out key);
        }).Select<JProperty,Job>((jp,i) => {
            return new Job
            {
                Id = jp.Value["id"].ToObject<string>(),
                Desc = jp.Value["description"].ToObject<string>()
            };
        }).ToArray();