反序列化 jSON Google AJAX Translation API

本文关键字:Translation API AJAX Google jSON 反序列化 | 更新日期: 2023-09-27 17:47:21

我让JSON像这样返回:

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

我需要将其解析为我设置的响应数据对象:

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 Google AJAX Translation API

您应该

考虑该字符串中表示的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);
}