Создание класса для десериализации JSON - PullRequest
1 голос
/ 05 декабря 2009

Рассмотрим следующий JSON:

{
    "Code": 2, 
    "Body": {
        "Dynamic-Key": {
            "Key1": "Val1", 
            "Key2": "Val2"
        }
    }
}

Определение следующей структуры классов:

[DataContract]
class JsonResponse
{
    [DataMember]
    public string  Code { get; set; }
    [DataMember]
    public JsonResponseBody Body { get; set; }
}
[DataContract]
class JsonResponseBody
{
    [DataMember(Name = "Dynamic-Key")]
    public DynamicKeyData Data { get; set; }
}
[DataContract]
class DynamicKeyData
{
    [DataMember]
    public string Key1 { get; set; }
    [DataMember]
    public string Key2 { get; set; }
}

Я могу десериализовать данный JSON с помощью следующего кода:

DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(JsonResponse));
JsonResponse responseData = serializer.ReadObject(responseStream) as JsonResponse;

Однако в моем случае «Динамическая клавиша» неизвестна и определяется значением, введенным пользователем. Как правильно обрабатывать такое определение JSON?

Вопросы:

JSON является сторонним Api, поэтому изменять его нельзя.

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

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

Ответы [ 2 ]

3 голосов
/ 05 декабря 2009

Вам определенно нужно использовать WCF? В противном случае я бы порекомендовал посмотреть на Json.NET . Существует ряд механизмов расширения, таких как Контрактные преобразователи

0 голосов
/ 07 февраля 2013

Сохраните JSON в строку, допустим, в strResult. Затем вы можете десериализовать его в объект JsonResponse следующим образом:

JsonConvert - это класс в dll Newtonsoft.Json.JsonConvert. Вы можете использовать его следующим образом:

JsonResponse object= (JsonResponse)JsonConvert.DeserializeObject(strResult,  typeof(JsonResponse));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...