2017-02-10 3 views
0

У меня есть файл JSON в этом форматеКак извлечь данные из 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" } 
      } 
} 
} 

У меня есть класс с именем Иов

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

} 

мне нужен список всех заданий, как IList из json string.

Мне нужно прочитать все значения в теге 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()) 
      { 

      } 

     } 

Не знаете, как получить значение для каждой строки и преобразовать в какой-либо класс.

Справка будет оценена по достоинству.

спасибо

+0

Создать класс, который представляет весь ваш входной JSON, а затем использовать '' DeserializeObject метод. (Вы можете вставить JSON в качестве класса в Visual Studio). –

+0

Вы уверены, что это ваша точная 'json string', потому что я думаю, что это неверно. Вы можете проверить его еще раз? –

ответ

2

yes Ваша ошибка в "jobs" | «Работа» ..

вы можете использовать в качестве alternaive ..

 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(); 
+0

Я должен вам два пива. он работает как очарование моего друга. большое спасибо. – Parminder

Смежные вопросы