2009-12-05 7 views
1

Considérons le JSON suivant:Création d'une classe pour JSON désérialisation

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

Définition de la structure des classes suivantes:

[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; } 
} 

je peux désérialiser le JSON donné avec le code suivant:

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

Cependant dans mon cas le "Dynamic-Key" ne sait pas n et est défini par la valeur d'entrée de l'utilisateur. Quelle est la bonne façon de gérer ce type de définition JSON?

Considérations:

Le JSON est d'un api tiers, afin de changer ce n'est pas une option.

Dans mon cas, je ne me soucie pas du nom de la clé dynamique, donc s'il y a une option pour toujours correspondre à un nom générique, il fera le travail.

Merci d'avance.

Répondre

3

Avez-vous vraiment besoin d'utiliser WCF? Sinon, je vous recommande de regarder Json.NET. Il y a un certain nombre de mécanismes d'extensibilité tels que Contract Resolvers

0

Stockez le JSON dans une chaîne laissons supposer dans strResult. Ensuite, vous pouvez le désérialiser dans l'objet JsonResponse comme suit:

JsonConvert est la classe de la DLL Newtonsoft.Json.JsonConvert. Vous pouvez l'utiliser comme suit:

JsonResponse object= (JsonResponse)JsonConvert.DeserializeObject(strResult, typeof(JsonResponse)); 
Questions connexes