在C#中反序列化Google的Translate API结果

时间:2014-07-07 07:27:37

标签: c# json deserialization google-translate json-deserialization

我正在尝试使用JavaScriptSerializer将Google的Translate API JSON响应反序列化为C#对象。但是,它总是说Type 'TranslateAPI.Models.Translations' is not supported for deserialization of an array.。我仔细检查了我是否为这个对象正确创建了模型,看起来是正确的。这是我的模特:

TranslateResult
    public TranslateData data { get; set; }

TranslateData
    public Translations translations { get; set; }

Translations
    public TranslatedText[] translatedText { get; set; } // I have also tried List<TranslatedText> which also doesn't work

TranslatedText
    public string translatedText { get; set; }

从Google返回的json看起来像这样:

{data: {
    translations: [
        {translatedText: "Hello world"}
    ]
}

知道我做错了吗?

由于

PS。可能有用的是,我将其反序列化为:TranslateResult translateResult = js.Deserialize <TranslateResult>(json);

1 个答案:

答案 0 :(得分:2)

我怀疑你根本不需要Translations课程。你有:

  • 包含data属性
  • 的对象
  • data属性值是包含translations属性
  • 的对象
  • translations属性值是一个数组
  • 数组的每个元素都是具有translatedText属性
  • 的对象

所以听起来像你的TranslateData课应该是:

TranslateData
    public Translation[] translations { get; set; }

Translation // Renamed from TranslatedText
    public string translatedText { get; set }

(我还建议您重命名属性以遵循正常的C#命名约定,然后根据需要应用属性来帮助进行JSON转换。我还没有使用JavaScriptSerializer有一段时间了,但我确定它是可行的。你不应该在你的C#代码中使用令人讨厌的属性名称。)