2015-11-01 3 views
0

Я получаю строку/объект json от моего сервера к моему клиенту C#.Разбор JSON в объект

Это JSON:

[ 
{"PrintId":1,"PrintRef":"00000000-0000-0000-0000-000000000000","Header":"header","TC":"tc","CompanyRef":"00000000-0000-0000-0000-000000000000"}, 
{"PrintId":2,"PrintRef":"39a10cee-7cb3-4ed3-aec2-293761eed96d","Header":"header","TC":"tc","CompanyRef":"00000000-0000-0000-0000-000000000000"}] 

Я пытаюсь преобразовать его в список объектов, например, так:

public IEnumerable<Model.Print> Get() 
{ 
    var print = new List<Model.Print>(); 

    using (var client = new HttpClient()) 
    { 
     client.BaseAddress = new Uri(Shared.URL); 
     client.DefaultRequestHeaders.Accept.Clear(); 
     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(Shared.HeaderType)); 
     var response = client.GetAsync(route + "?" + GeneralTags.CUSTOMER_REF + "=" + new Guid().ToString()).Result; 

     if (response.IsSuccessStatusCode) 
     { 
      var strJson = response.Content.ReadAsStringAsync().Result; 
      var strJson2 = (JObject)JsonConvert.DeserializeObject(strJson); 

      List<Model.Print> items = strJson2["data"].Select(x => new Model.Print 
      { 
       CompanyRef = (Guid)x["CompanyRef"], 
       Header = (string)x["Header"], 
       PrintId = (int)x["PrintId"], 
       PrintRef = (Guid)x["PrintRef"], 
       TC = (string)x["TC"] 
      }).ToList();     
     } 
     else 
     { 
      evError(new Exception(String.Format("{0}: {1}", (int)response.StatusCode, response.ReasonPhrase)), ErrorTags.PRINT_GET); 
     } 
    } 
    return print; 
} 

Но это ошибки на этой линии:

var strJson2 = (JObject)JsonConvert.DeserializeObject(strJson); 

Это ошибка:

Unable to cast object of type 'Newtonsoft.Json.Linq.JArray' to type 'Newtonsoft.Json.Linq.JObject'. 
+2

JsonConvert.DeserializeObject <Список > (strJson) – Mate

+0

Привет, это сделал не работает при использовании Raspberry Pi2 (с Windows 10 IoT в качестве ОС). Я забыл добавить тег Rabberry Pi2. - извините –

ответ

2

Ваша структура json верхнего уровня представляет собой массив вместо объекта. Этого вам нужно будет бросить в JArray вместо JObject:

var root = (JObject)JsonConvert.DeserializeObject(strJson); 

Если вы просто хотите, чтобы извлечь все объекты вместо:

var objs = ((JArray)JsonConvert.DeserializeObject(json)).Values<JObject>(); 
+0

yu начало. большое спасибо! –

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