2016-02-04 2 views
0

Я получаю данные Json от API, и я пытаюсь десериализовать. ДанныеКак десериализовать данные JSON? C#

Json:

{ 
   "items": [ 
      { 
         "id": "1", 
         "name": "samplename", 
         "AddressList1": { 
            "City": "Hyd", 
            "State": "TN", 
            "Country": "IN" 
         }, 
         "Age": "10" 
      }, 
      { 
         "id": "2", 
         "name": "samplename2", 
         "AddressList1": { 
            "City": "Hydd", 
            "State": "TN", 
            "Country": "IN" 
         }, 
         "Age": "10" 
      } 
   ], 
   "paging": { 
      "cursors": {} 
   } 
} 

Сущность:

public class AddressList1 
{ 
    public string City { get; set; } 
    public string State { get; set; } 
    public string Country { get; set; } 
} 

public class Item 
{ 
    public string id { get; set; } 
    public string name { get; set; } 
    public AddressList1 addressList1 { get; set; } 
    public string Age { get; set; } 
} 

public class Cursors 
{ 
} 

public class Paging 
{ 
    public Cursors cursors { get; set; } 
} 

public class Users 
{ 
    public List<Item> items { get; set; } 
    public Paging paging { get; set; } 
} 

C# код:

JsonConvert.DeserializeObject<List<Users>>(content); 

Сообщения об ошибке:

Не может десериализацию текущий объект JSON (например, {"name": "value"}) в тип 'System.Collections.Generic.List`1 [Entities.Users]' , так как для типа требуется массив JSON (например, [1,2,3]) для десериализации правильно.

, где я делаю неправильно?

+0

если вы прокрутите вниз, то, как правило, точное расположение в формате JSON отметил – Plutonix

+0

Я думаю, что он считает, что «элементы»: [...] является JArray. Является ли JSON из сериализации одних и тех же моделей? – Swen

+0

В частности, десериализация в «Список » имеет смысл только в том случае, если значение верхнего уровня является массивом в JSON. В вашем случае это не так - это объект с двумя свойствами ('items' и' paging'). –

ответ

3

Следующий объект JSON; в вашем случае User

{ ... } 

Ниже приводится JSON-массив; в вашем случае массив User

[ { ... }, { ... } ] 

Таким образом, если вы хотите десериализации JSON вы получили в массив пользователей это не представляется возможным, потому что у вас нет массива в формате JSON.

Поэтому правильный код для десериализации является:

JsonConvert.DeserializeObject<Users>(content); 

Кроме того ваше отображение является ошибочным, поскольку в JSON есть свойство AddressList1 и в классе он называется addressList1

+0

Я использовал http://json2csharp.com/ для создания сущностей –

+0

@KeerthiTeja ok, тогда вы, возможно, ошиблись. Я попробовал ваш JSON, и в 'Item' я получил' AddressList1' (проверка заглавной буквы) –

1

Учитывая ваш JSON, вам понадобится объект POCO, который содержит элемент и элемент подкачки.

JsonConvert.DeserializeObject<Users>(content); 

должно работать.

1

Ваша строка Json хорошо отформатированный и сущности в соответствии с Json2Csharp тоже хорошо.

, но ваша проблема с инструкцией JsonConvert.DeserializeObject<List<Users>>(content);

все, что JSon, что у вас есть только ONE пользователя, и вы пытаетесь получить список из них, существует проблема,

вы можно попробовать вместо:

JsonConvert.DeserializeObject<Users>(content); 
+0

это исправило мою проблему. thanks mate :) изменено на: общественный класс Пользователи { общественный пункт [] предметы {get; задавать; } public Paging paging {get; задавать; } } и JsonConvert.DeserializeObject (содержимое); –

0

Ваши сущности (модели) выглядят просто отлично. Если вы используете или используете ASP.NET Web API 2, и ваш клиент использует HTTP глагол пост, например, эта установка будет работать в качестве Web API заботится объекта десериализации:

public HttpStatusCode Post(Item item) 
    { 
     Debug.Write(item.toString()); 
     return HttpStatusCode.OK; 
    } 

Если вы настаиваете в десериализации вручную затем использовать JavaScriptSerializer library, который позволяет вам делать такие вещи, как:

Item item = new JavaScriptSerializer().Deserialize<Item>(content); 

Обратите внимание, что .Deserialize<T>() принимает родовой, который в вашем случае это Item.

Надеюсь, что это поможет.

1

Try Ниже кодекса

JsonConvert.DeserializeObject<Users>(content); 
Смежные вопросы