【问题标题】:Deserialize jSON Google AJAX Translation API反序列化 JSON Google AJAX 翻译 API
【发布时间】:2010-09-15 09:15:28
【问题描述】:

我得到的 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);

但是不管翻译什么文字总是空的。

【问题讨论】:

  • 您是在使用来自 ASP.NET AJAX 的 System.Web.Script.Serialization.JavaScriptSerializer 类,还是第三方序列化器?

标签: c# ajax json google-translate


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-22
    • 2022-01-20
    • 1970-01-01
    • 2015-11-02
    相关资源
    最近更新 更多