Вопрос

Я получил JSON, возвращающийся вот так:

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

И мне нужно проанализировать его в объект ResponseData, который я настроил:

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

        public object responseDetails = null;

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

Я десериализую это так:

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

Но независимо от того, что переведенный текст всегда пуст.

Это было полезно?

Решение

вам следует подумать о графе объектов JSON, представленном в этой строке.

Вы можете вкладывать типы для десериализации объектов с разными свойствами/полями, используя дженерики, например:

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

}

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top