Десериализовать в объект со списком - PullRequest
0 голосов
/ 17 января 2012

Я пытаюсь разобрать строку ответа JSON для своих объектов класса ... Я не могу понять это, и мне нужна помощь с этим.

Я использую ссылку json.net, но не могу найти то, что ищу: (

мой JSON:

{

"@companyName": "Company Name",
"@version": "1.0",
"@generatedDate": "3/1/10 2:10 PM",
"application": [
    {
        "@name": "Application #1 name",
        "@apiKey": "1234",
        "@createdDate": "2010-03-01",
        "@platform": "Platform name"
    },
    {
        "@name": "Application #1 name",
        "@apiKey": "1234",
        "@createdDate": "2010-03-01",
        "@platform": "Platform name"
    }
]
}

Мой корневой класс для JSON:

public class RootObject
{
    [JsonProperty]
    public string companyName { get; set; }

    [JsonProperty]
    public string version { get; set; }

    [JsonProperty]
    public string generatedDate { get; set; }

    [JsonProperty]
    public List<Application> application { get; set; }
}

мой подкласс (список приложений):

public class Application
{
    [JsonProperty]
    public string name { get; set; }

    [JsonProperty]
    public string apiKey { get; set; }

    [JsonProperty]
    public string createdDate { get; set; }

    [JsonProperty]
    public string platform { get; set; }
}

Чтобы разобрать его, у меня есть следующий код:

      JObject obj = JObject.Parse(e.Result);
      applications = new RootObject
            {
                companyName = (string) obj["companyName"],
                version = (string) obj["version"],
                generatedDate = (string) obj["generatedDate"],
                application = ???????? (how to make a list here?)

            }

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

Ответы [ 3 ]

4 голосов
/ 17 января 2012

Измените определения классов следующим образом

public class RootObject
{
    [JsonProperty("@companyName")]
    public string companyName { get; set; }

    [JsonProperty("@version")]
    public string version { get; set; }

    [JsonProperty("@generatedDate")]
    public string generatedDate { get; set; }

    public List<Application> application { get; set; }
}

public class Application
{
    [JsonProperty("@name")]
    public string name { get; set; }

    [JsonProperty("@apiKey")]
    public string apiKey { get; set; }

    [JsonProperty("@createdDate")]
    public string createdDate { get; set; }

    [JsonProperty("@platform")]
    public string platform { get; set; }
}

и десериализацию

var rootObj = JsonConvert.DeserializeObject<RootObject>(myjson);
0 голосов
/ 17 января 2012

В проекте, над которым я работаю, иногда используется Json.Net.Это прекрасная библиотека.Вместо этого я бы использовал метод JsonConvert.DeserializeObject.

В вашем случае я бы попробовал что-то вроде этого:

var result = JsonConvert.DeserializeObject<RootObject>(yourJsonString);

Это должно позаботиться об этом.

0 голосов
/ 17 января 2012

Можете ли вы попробовать следующий код и сообщить о любых проблемах:

RootObject applications = JsonConvert.DeserializeObject<RootObject>(e.Result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...