Дезертилизировать JSON - PullRequest
       5

Дезертилизировать JSON

0 голосов
/ 28 ноября 2011

Как десериализовать следующую строку JSON в объект?

{
    "ArrayOfResults": {
        "Results": [
            {
                "ErrorID": "0",
                "ErrorMessage": null,
                "MetroID": "281",
                "MetroName": "050908 add metor no dffd"
            },
            {
                "ErrorID": "0",
                "ErrorMessage": null,
                "MetroID": "284",
                "MetroName": "050908 added with dff"
            }
        ]
    }
}

Ответы [ 3 ]

0 голосов
/ 28 ноября 2011

То, что вы показали, это неверный JSON .Вам нужно будет исправить свой JSON, чтобы надеяться обработать его с помощью сериализатора JSON:

{
    "ArrayOfResults": {
        "Results": [
            {
                "ErrorID": "0",
                "ErrorMessage": null,
                "MetroID": "281",
                "MetroName": "050908 add metor no dffd"
            },
            {
                "ErrorID": "0",
                "ErrorMessage": null,
                "MetroID": "284",
                "MetroName": "050908 added with dff"
            }
        ]
    }
}

После того, как вы исправили его, вы можете использовать класс JavaScriptSerializer , чтобы десериализовать его длятипизированная модель, которую вы определяете:

public class Item
{
    public int ErrorID { get; set; }
    public string ErrorMessage { get; set; }
    public int MetroID { get; set; }
    public string MetroName { get; set; }
}

public class ResultArray
{
    public Item[] Results { get; set; }
}

public class Result
{
    public ResultArray ArrayOfResults { get; set; }
}

class Program
{
    static void Main()
    {
        var json = @"{ ""ArrayOfResults"": { ""Results"": [ {""ErrorID"": ""0"", ""ErrorMessage"": null, ""MetroID"": ""281"", ""MetroName"": ""050908 add metor no dffd"" }, {""ErrorID"": ""0"", ""ErrorMessage"": null, ""MetroID"": ""284"", ""MetroName"": ""050908 added with dff"" }]}}";
        var serializer = new JavaScriptSerializer();
        var response = serializer.Deserialize<Result>(json);

        // TODO: do something with the response
    }
}
0 голосов
/ 28 ноября 2011
var s = new JavaScriptSerializer();
var result = s.Deserialize<List<YourType>>(strJson);

?

И, конечно, было бы лучше сериализовать список вашего типа аналогичным образом

0 голосов
/ 28 ноября 2011

Вы можете использовать эту структуру: http://json.codeplex.com/

Взято из документации :

JObject o = new JObject(
  new JProperty("Name", "John Smith"),
  new JProperty("BirthDate", new DateTime(1983, 3, 20))
  );

JsonSerializer serializer = new JsonSerializer();
Person p = (Person)serializer.Deserialize(new JTokenReader(o), typeof(Person));

Console.WriteLine(p.Name);
// John Smith
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...