JSON.NET десериализует многомерный массив? - PullRequest
2 голосов
/ 26 января 2012

Я передаю (или очень стараюсь!) Объект JSON в свой код.

Это объект JSON:

[
    {
        "testLaag":{
            "layer_zindex":1,
            "layer_type":1,
            "layer_width":1,
            "layer_height":1,
            "layer_offset_left":1,
            "layer_offset_top":1,
            "layer_html":1,
            "layer_fontcolor":1,
            "layer_fontsize":1,
            "layer_rotation":1,
            "layer_color":1,
            "layer_name":1,
            "layer_fontFamily":1
        },
        "testLaag2":{
            "layer_zindex":2,
            "layer_type":2,
            "layer_width":2,
            "layer_height":2,
            "layer_offset_left":2,
            "layer_offset_top":2,
            "layer_html":2,
            "layer_fontcolor":2,
            "layer_fontsize":2,
            "layer_rotation":2,
            "layer_color":2,
            "layer_name":2,
            "layer_fontFamily":2
        }
    }
]

Код из кода:

string data = "[" + Request.Form["layers"] + "]";
JsonSerializerSettings settings = new JsonSerializerSettings();
settings.TypeNameHandling = TypeNameHandling.All;
List<Laag> layers = JsonConvert.DeserializeObject<List<Laag>>(data, settings);

foreach (Laag laag in layers)
{
    Response.Write(laag.layer_name);
}

А вот мой класс:

public class Laag
{
    public int layer_zindex {get; set;}
    public int layer_type { get; set; }    
    public double layer_width { get; set; }
    public double layer_height { get; set; }
    public double layer_offset_left { get; set; }
    public double layer_offset_top { get; set; }
    public string layer_html { get; set; }
    public string layer_fontcolor { get; set; }
    public double layer_fontsize { get; set; }
    public double layer_rotation { get; set; }
    public string layer_color { get; set; }
    public string layer_name { get; set; }
    public string layer_fontFamily { get; set; }
}

В настоящее время он сводит меня и моего коллегу с ума.Все, что мы хотим, - это иметь оба "запаздывающих" объекта в объекте List.JSON и методы обработки являются совершенно новыми для нас обоих, поэтому мы, вероятно, упускаем что-то невероятно глупое.

Заранее спасибо,

-Ferdy

1 Ответ

1 голос
/ 10 февраля 2012

Создайте еще один класс-оболочку

public class wrapperOfLaag{
     public List<Laag> listLag;
}

и попробуйте

string data = "[" + Request.Form["layers"] + "]";
JavaScriptSerializer ser = new JavaScriptSerializer();
wrapperOfLaag p = ser.Deserialize<wrapperOfLaag >(data);
...