2013-03-12 3 views
2
return jsSerializer.Deserialize<MamDataResponseHolder>(stringJson); 

déclenche une exception:JSON désérialisation pour objet échoue

Type 'System.String' est pas prise en charge pour la désérialisation d'un tableau.

Mais je ne vois pas le problème.

public class MamDataResponseHolder 
    { 
     public MamDataResponsePair[] configuration { get; set; } 
     public string Status { get; set; } 
    } 

    public class MamDataResponsePair 
    { 
     public string id { get; set; } 
     public MamDataResponsecriteria[] criterias { get; set; } 
    } 

public class MamDataResponsecriteria 
    { 
     public Guid criteriaId { get; set; } 
     public string[] domains { get; set; } 
     public string domainsException { get; set; } 
    } 

Et voici le JSON:

{ 
     "configuration": [{ 
      "id": "Coupon Body", 
      "criterias": [{ 
       "criteriaId": "c7150fc2-72b9-4628-a199-dd5c0bdeef1b", 
       "domains": [""], 
       "domainsException": [""] 
      }] 
     }], 
     "Status": "succeeded" 
    } 
+0

' "domainsException": [ ""]' - c'est sérialisé comme un tableau, mais dans le modèle est une chaîne –

Répondre

2

Votre modèle et votre Json ne correspondent pas. Jetez un oeil à domainsException. Dans votre Json, c'est clairement une chaîne de caractères, mais dans votre modèle, c'est juste une chaîne.

En plus de cela: Êtes-vous sûr de vouloir [""] dans votre Json? De cette façon, vous obtenez un tableau avec une chaîne vide au lieu d'un tableau vide.

1

Vos classes devraient être comme ci-dessous:

public class Criteria 
{ 
    public string criteriaId { get; set; } 
    public List<string> domains { get; set; } 
    public List<string> domainsException { get; set; } 
} 

public class Configuration 
{ 
    public string id { get; set; } 
    public List<Criteria> criterias { get; set; } 
} 

public class RootObject 
{ 
    public List<Configuration> configuration { get; set; } 
    public string Status { get; set; } 
} 
+1

Pourquoi? Il n'est absolument pas nécessaire de renommer les classes et d'utiliser List à la place des tableaux. En outre, vous n'avez même pas mentionné le problème exact. – JustAnotherUserYouMayKnow

+0

Oui, il n'est pas nécessaire de renommer les classes, mais il est recommandé de garder le même nom que lorsque vous obtenez une réponse, car si vous le sérialisez à nouveau plus tard, vous pouvez obtenir la même chose comme chaîne d'entrée. – Popeye

+0

Ensuite, vous devriez vraiment mentionner votre intention dans votre réponse. – JustAnotherUserYouMayKnow

Questions connexes