Pregunta

Tengo el JSON regresando así:

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

Y necesito analizarlo en un objeto ResponseData que he configurado:

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

        public object responseDetails = null;

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

Lo deserializo así:

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

Pero no importa qué texto traducido siempre esté vacío.

¿Fue útil?

Solución

debería pensar en el gráfico de objetos JSON representado en esa cadena.

Puede anidar tipos para deserializar objetos con diferentes propiedades / campos utilizando genéricos de la siguiente manera:

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

}

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top