Wednesday, February 9, 2011

Deserialize jSON Google AJAX Translation API

I've got the JSON coming back like this:

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

And I need to parse it into a ResponseData object I have set-up:

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

        public object responseDetails = null;

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

I Deserialize it like this:

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

But no matter what the translated text is always empty.

  • you should think about the JSON object graph represented in that string.

    You can nest types for deserializating objects with different properties/fields using generics like so:

     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);
    

    }

    From CVertex
  • check this post : http://www.prabhuram.com/blogs/post/2010/03/16/Using-%28Java-Script-Object-Notation%29-JSON-in-NET.aspx

    From Prabhuram

0 comments:

Post a Comment