2009-12-05 4 views
1

Рассмотрим следующий JSON:Создание класса для 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; 

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

соображения:

JSON имеет Апи третьей стороной, так что изменение это не вариант.

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

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

ответ

3

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

0

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

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

JsonResponse object= (JsonResponse)JsonConvert.DeserializeObject(strResult, typeof(JsonResponse)); 
Смежные вопросы