2015-08-10 3 views
0

Этот вопрос, вероятно, задавали десятки раз, но я не могу найти что-нибудь полезным, так ...Deserialize JSON данные из JSON массива

JSON данных выглядит следующим образом

{ 
"aaData": [ 
     [ 
     8120, 
     "username", 
     "[email protected]", 
     "\/", 
     "CUSTOMER (SellerName)", 
     "name", 
     "<span class=\"label label-danger\">2015-08-05<\/span>", 
     "<a class=\"btn btn-xs btn-primary manageDevices\" href=\"#\" id=\"manageDevices\" data-customerid=\"8120\" data-toggle=\"modal\">1<\/a>", 
     "<a id=\"8120\" href=\"http:\/\/cms.*********.com:8081\/manageCustomers?customerId=8120\" class=\"btn btn-xs btn-primary\">View<\/a>", 
     "YES" 
     ], 
     .... 
     ] 
    ], 
    "sEcho": "NULL", 
    "iTotalRecords": 65, 
    "iTotalDisplayRecords": 65 
} 

Очевидно, что это не поможет:

private class OuterUser 
{ 
    string id { get; set; } 
    string username { get; set; } 
    string line { get; set; } 
    string reseller { get; set; } 
    string username2 { get; set; } 
    string date1 { get; set; } 
    string manage { get; set; } 
    string manageUser { get; set; } 
    string active { get; set; } 
} 

dynamic jsonDe = JsonConvert.DeserializeObject<OuterUser>(rpl); 
//dynamic j = JsonConvert.DeserializeObject<List<OuterUser>>(rpl); 

У кого-нибудь есть идея, как десериализировать это? И объясните, что я сделал неправильно. Мне не нужны данные внизу (итоговые записи) и т. Д. На самом деле, мне нужно только идентификатор, начинающийся, имя пользователя и адрес электронной почты. Прокомментированный код также терпит неудачу, и я думаю, что это часть решения.

+0

Try 'JsonConvert.DeserializeObject (RPL);' как вы написали вам нужен массив. Есть ли контейнерный объект? –

+0

@CSharper - я тоже пробовал это, но получил это исключение: 'Исключение типа 'Newtonsoft.Json.JsonSerializationException' произошло в Newtonsoft.Json.dll, но не было обработано в коде пользователя Кроме того, я думаю, что этот" aaData "- это своего рода контейнер с остальными пользователями ... Дополнительная информация: Невозможно десериализовать текущий объект JSON (например, {" name ":" value "}) в тип 'tvTracker.Data.IPTV + OuterUser []' потому что для этого требуется массив JSON (например, [1,2,3]). Мне нужен список этих пользователей или массив. Что-нибудь. – nighthawk

ответ

5

Если очистить ваш JSON (удалить ....]) и отправить его на Json2Csharp.com, вы получите:

public class RootObject 
{ 
    public List<List<object>> aaData { get; set; } 
    public string sEcho { get; set; } 
    public int iTotalRecords { get; set; } 
    public int iTotalDisplayRecords { get; set; } 
} 

В списке значений вы заинтересованы в, кажется, вложенная массив различных типы. Это не может быть сопоставлено с вашим классом OuterUser, так как значения не указаны в ноте key: value, это просто элементы массива.

Таким образом, вы будете иметь десериализовать к RootObject, а затем шаг в (или перебирать) в List<List<object>>:

var parsed = JsonConvert.DeserializeObject<RootObject>(rpl); 
var firstUser = parsed.aaData[0]; 
var firstUserID = firstUser[0]; // 8120 
+0

Отлично! Сохраненная ссылка также, кажется, очень полезна в моих войнах с JSON. Будет принимать ответ, как только сайт разрешит его. Благодаря! – nighthawk

+1

Он также встроен в VS: Edit -> Paste Special -> Paste JSON As Classes. Это даст 'object [] []' хотя, но вы можете итерировать или индексировать их так же легко. – CodeCaster