我正在尝试使用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);
答案 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#代码中使用令人讨厌的属性名称。)