2013-12-07 4 views
0

У меня проблема с ответом сервера десериализации в формате JSON. Я использую JavaScriptSerializer, но я получаю null от него.Asp.net json deserialization

{ "0": { "Имя": "BusinessSegmentFilter", "Элементы": { "0": { "ItemName": "1650", "IsEditable" ложь "IsClicked": ложь, "IsSelected" ложь}, "1": { "ItemName": "1457", "IsEditable" ложь "IsClicked" ложь "IsSelected" ложь}, "2": { "ItemName": "1649 », "IsEditable" ложь "IsClicked" ложь "IsSelected" ложь}, "3": { "ItemName": "тысяча шестьсот пятьдесят одна", "IsEditable" ложь "IsClicked" ложь "IsSelected": ложь}, "4": { "ItemName": "4480", "IsEditable" ложь "IsClicked" ложь "IsSelected" ложь}, "5": { "ItemName": "1692", "IsEditable "ложь" IsClicked "ложь" IsSelected "ложь}," 6 ": {" ItemName ":" 4012" , "IsEditable" ложь "IsClicked" ложь "IsSelected" ложь},» 7 ": {" ItemName ":" 4198" , "IsEditable" ложь "IsClicked" ложь "IsSelected" ложь}, "8": { "ItemName": "1652", "IsEditable" ложь, "IsClicked" ложь "IsSelected" ложь}}, "MaxValue": нулевой, "MinValue": нулевой}, "1": { "Имя": "Бизнес SegmentFilter " "элементы": { "0": { "ItemName": "1650", "IsEditable" ложь "IsClicked" ложь "IsSelected" ложь}, "1": { "ItemName":" 1 457" , "IsEditable" ложь "IsClicked" ложь "IsSelected" ложь}, "2": { "ItemName": "1649", "IsEditable" ложь "IsClicked" ложь "IsSelected" ложь}, "3": { "ItemName": "1 651", "IsEditable" ложь "IsClicked" ложь "IsSelected" ложь}, "4": { "ItemName": "4480",» IsEditable "ложь" IsClicked "ложь" IsSelected "ложь}," 5 ": {" ItemName ":" одна тысяча шестьсот девяносто два" , "IsEditable" ложь "IsClicked" ложь "IsSelected" ложь}, "6": { "ItemName": "4012", "IsEditable" ложь "IsClicked" ложь "IsSelected" ложь}, "7": { "ItemName": "4198", "IsEditable" ложь , "IsClicked" ложь "IsSelected" ложь}, "8": { "ItemName": "тысячу шестьсот пятьдесят две", "IsEditable" ложь "IsClicked" ложь "IsSelected" ложь}}, "MaxValue" : null, "MinValue": null}}

var resposne = serializer.Deserialize<AjaxResposne>(eventArgument); 


    public class AjaxResposne 
    { 

    public string Name { get; set; } 
    public List<Item> Items { get; set; } 
    public string MaxValue { get; set; } 
    public string MinValue { get; set; } 
} 

public class Item 
{ 
    public string ItemName { get; set; } 
    public bool IsEditable { get; set; } 
    public bool IsClicked { get; set; } 
    public bool IsSelected { get; set; } 


} 

ответ

2

Ваш json содержит названия свойств, такие как "0", "1" и т. Д. Таким образом, вы должны использовать некоторые трюки для десериализации правильно (Dictionary<string,SomeClass>).

var obj = new JavaScriptSerializer() 
       .Deserialize<Dictionary<string,ItemCollection>>(json); 

public class ItemCollection 
{ 
    public string Name { get; set; } 
    public string MaxVlaue { get; set; } 
    public string MinValue { get; set; } 
    public Dictionary<string, Item> Items { get; set; } 
} 

public class Item 
{ 
    public string ItemName { get; set; } 
    public bool IsEditable { get; set; } 
    public bool IsClicked { get; set; } 
    public bool IsSelected { get; set; } 
} 
1

Ваш JSON неправильно, не касается синтаксиса, но относительно способ JavaScriptSerializer ожидает ваши списки должны быть структурированы.

Удалить индексы и использовать обычный массив, и все работает, как ожидалось:

{ 
    "Name": "BusinessSegmentFilter", 
    "Items": [ 
     { 
      "ItemName": "1650", 
      "IsEditable": false, 
      "IsClicked": false, 
      "IsSelected": false 
     } 
    ], 
    "MaxValue": null, 
    "MinValue": null 
} 
+0

Нет JSON не является неправильным. Протестируйте его [здесь] (http://jsonlint.com/) –

+0

@ L.B: Это то, что я говорю, его единственное неправильное соответствие списку ... – CodeZombie

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