2017-10-19 12 views
0

Ci-dessous ma chaîne JSONComment deserialize donné chaîne JSON à une classe définie

Json Chaîne

{ 
    "RestResponse": { 
    "messages": [ 
     "Country found matching code [IN]." 
    ], 
    "result": { 
     "name": "India", 
     "alpha2_code": "IN", 
     "alpha3_code": "IND" 
    } 
    } 
} 

J'ai fait ces classes dans Xamarin mais n'est pas l'analyse syntaxique Json à des objets, S'il vous plaît guider.

public class Country 
{ 
    [JsonProperty(PropertyName = "RestResponse")] 
    public List<myRestResponse> RestResponse { get; set; } 
} 

public class myRestResponse 
{ 
    [JsonProperty(PropertyName = "messages")] 
    public List<string> messages { get; set; } 
    [JsonProperty(PropertyName = "result")] 
    public List<Result> result { get; set; } 
} 

public class Result 
{ 
    [JsonProperty(PropertyName = "name")] 
    public string name { get; set; } 
    [JsonProperty(PropertyName = "alpha2_code")] 
    public string alpha2_code { get; set; } 
    [JsonProperty(PropertyName = "alpha3_code")] 
    public string alpha3_code { get; set; } 
} 

Je désérialisation en utilisant le code ci-dessous

var content = await response.Content.ReadAsStringAsync(); 
Country country = JsonConvert.DeserializeObject<Country>(content); 
+0

'RestResponse' n'est pas une collection pour commencer et n'est' result'. – juharr

Répondre

2

aide un outil tel que http://json2csharp.com/ vous aide à définir vos classes.

Cela donne le résultat de

public class Result 
{ 
    public string name { get; set; } 
    public string alpha2_code { get; set; } 
    public string alpha3_code { get; set; } 
} 

public class RestResponse 
{ 
    public List<string> messages { get; set; } 
    public Result result { get; set; } 
} 

public class Country 
{ 
    public RestResponse RestResponse { get; set; } 
} 

Ainsi, vous pouvez voir que votre classe de pays (objet racine) ne doit pas avoir une liste. RestResponse ne doit contenir qu'un seul objet Result, et non une liste.

0

Vous JSON est pas le format correct en fonction de la structure de votre classe. Il y a deux problèmes avec JSON. Selon votre structure de classe, vous essayez de DeSerialize, property'RestResponse 'est un tableau mais dans votre JSON il ne l'est pas. Un autre est la propriété 'result', qui est encore un tableau mais dans votre JSON ce n'est pas le cas. Soit mettre à jour votre structure de classe en fonction de votre format JSON ou s'il vous plaît essayer ci-dessous JSON,

{ 
 
    "RestResponse": [ 
 
    { 
 
     "messages": [ "Country found matching code [IN]." ], 
 
     "result": [ 
 
     { 
 
      "name": "India", 
 
      "alpha2_code": "IN", 
 
      "alpha3_code": "IND" 
 
     } 
 
     ] 
 
    } 
 
    ] 
 
}

Si vous souhaitez mettre à jour votre structure de classe s'il vous plaît copier ci-dessous des classes,

public class Result 
{ 
public string name { get; set; } 
public string alpha2_code { get; set; } 
public string alpha3_code { get; set; } 
} 

public class RestResponse 
{ 
public List<string> messages { get; set; } 
public Result result { get; set; } 
} 

public class RootObject 
{ 
public RestResponse RestResponse { get; set; } 
} 
0

Vos définitions de classe ne correspondent pas aux données de réponse. Vous pouvez facilement créer une définition de classe en utilisant un outil en ligne. Si vous utilisez Visual Studio, vous pouvez simplement utiliser l'option Coller spécial du Modifier le menu. Rappelez-vous, vous devez d'abord copier la chaîne de réponse avant de faire le collage.

enter image description here