2008-10-05 16 views
2

j'ai le JSON revenir comme ceci:Deserialize JSON Google AJAX API de traduction

{"responseData": [{"responseData":{"translatedText":"elefante"},"responseDetails":null,"responseStatus":200},{"responseData":{"translatedText":"Burro"},"responseDetails":null,"responseStatus":200}], "responseDetails": null, "responseStatus": 200} 

Et je dois l'analyser dans un objet responseData je mis en place:

public class ResponseData 
    { 
     public string translatedText = string.Empty; 

     public object responseDetails = null; 

     public HttpStatusCode responseStatus = HttpStatusCode.OK; 
     public List<ResponseData> responseData { get; set; } 
    } 

Je le désérialise comme ceci:

JavaScriptSerializer serializer = new JavaScriptSerializer(); 
ResponseData translation = 
        serializer.Deserialize<ResponseData>(responseJson); 

Mais peu importe ce que le texte traduit est toujours vide.

+0

Utilisez-vous la classe System.Web.Script.Serialization.JavaScriptSerializer de ASP.NET AJAX, ou s'agit-il d'un sérialiseur tiers? –

Répondre

3

vous devriez penser au graphe d'objet JSON représenté dans cette chaîne.

Vous pouvez les types de nids pour les objets deserializating avec différentes propriétés/domaines génériques en utilisant comme ceci:

class Response<T> 
{ 
    public ResponseData<T>[] responseData = new ResponseData<T>[0]; 
    public HttpStatusCode responseStatus; 
    public object responseDetails; 
} 

public class ResponseData<TInternal> { 
    public TInternal responseData; 
    public HttpStatusCode responseStatus; 
    public object responseDetails; 
} 

public class TranslatedText 
{ 
    public string translatedText; 
} 

[Test] 
public void Sample() 
{ 
    var input = @" 
     { 
     ""responseData"": [{""responseData"": {""translatedText"" : ""elefante"" },   ""responseDetails"":null, ""responseStatus"":200} , {""responseData"": {   ""translatedText"":""Burro"" }, ""responseDetails"":null, ""responseStatus"":200}], 
     ""responseDetails"" : null, ""responseStatus"": 200} 
     "; 

    var json = new JavaScriptSerializer(); 
    var response = json.Deserialize<Response<TranslatedText>>(input); 
    Assert.AreEqual(response.responseData[0].responseData.translatedText,"elefante"); 
    Assert.AreEqual(response.responseStatus,HttpStatusCode.OK); 

}