Подтвердить что ты не робот

Какова самая простая функция С# для синтаксического анализа строки JSON в объект?

Какова простейшая функция С# для синтаксического анализа строки JSON в объект и отображения ее (С# XAML WPF)? (например, объект с 2 массивами - arrA и arrB)

4b9b3361

Ответ 1

DataContractJsonSerializer serializer = 
    new DataContractJsonSerializer(typeof(YourObjectType));

YourObjectType yourObject = (YourObjectType)serializer.ReadObject(jsonStream);

Вы также можете использовать JavaScriptSerializer, но DataContractJsonSerializer предположительно лучше справляется с сложными типами.

Как ни странно, JavaScriptSerializer когда-то устарел (в 3.5), а затем воскрешен из-за ASP.NET MVC (в 3.5 SP1). Этого было бы достаточно, чтобы поколебать доверие и привести меня к использованию DataContractJsonSerializer, так как он сильно испечен для WCF.

Ответ 3

Я думаю, что это то, что вы хотите:

JavaScriptSerializer JSS = new JavaScriptSerializer();
T obj = JSS.Deserialize<T>(String);

Ответ 4

Вы должны создать структуру, представляющую ключи JSON (в случае, если вы точно это знаете), а затем вы можете легко десериализовать строку JSON в своей структуре. На моем примере я отменил дескрипцию ответа с сервера Google Cloud Message:

class templateResponse
{
    public String multicast_id;
    public String success;
    public String failure;
    public String canonical_ids;
    public Result[] results;

    public class Result
    {
        public String message_id;
        public String registration_id;
        public String error;
    };
}

входящий JSON был:

"\"multicast_id\":7400896764380883211,\"success\":1,\"failure\":0,\"canonical_ids\":0,\"results\":[{\"message_id\":\"0:1351777805148960%39895cf0f9fd7ecd\"}]}"

Итак, используйте

templateResponse result = new JavaScriptSerializer().Deserialize<templateResponse>(json);

и вы получите десериализованный result объект

Ответ 5

Я бы воспользовался библиотекой Json.NET, которая может преобразовать ответ JSON в XML-документ. С помощью XML-документа вы можете легко запросить XPath и извлечь нужные данные. Мне это очень полезно.