如何将 GetStringAsync 结果反序列化为翻译后的文本

How to deserialize GetStringAsync Result into translated text

我有一个使用 Google API 翻译文本的工作方法,如下所示;

public string TranslateText(string input, string sourceLanguage, string targetLanguage)
{
    string sourceCulture = LanguageCultureGenerator.GenerateCulture(sourceLanguage);
    string targetCulture = LanguageCultureGenerator.GenerateCulture(targetLanguage);

    string url = String.Format("https://translate.googleapis.com/translate_a/single?client=gtx&sl=
{0}&tl={1}&dt=t&q={2}",
   sourceCulture, targetCulture, Uri.EscapeUriString(input));

    HttpClient client = new HttpClient();
    string result = client.GetStringAsync(url).Result;

    var jsonData = new JavaScriptSerializer().Deserialize<List<dynamic>>(result);     
    var translationItems = jsonData[0];

    string translation = "";

    foreach (object item in translationItems)
    {
        IEnumerable translationLineObject = item as IEnumerable;
        IEnumerator translationLineString = translationLineObject.GetEnumerator();
        translationLineString.MoveNext();

        translation += string.Format(" {0}", Convert.ToString(translationLineString.Current));
    }
    if (translation.Length > 1)
    { translation = translation.Substring(1); }
    return translation;
}

问题是,这个 class 在类型为 .Net Framework 的库中,我想将它移动到类型为 .Net Core 的 class 库中,之后移动它我意识到 'JavaScriptSerializer' 不能在这种类型的库中使用。相反,我更改了这行代码;

 //Redundant
 var jsonData = new JavaScriptSerializer().Deserialize<List<dynamic>>(result); 

使用 Newtonsoft Json 如下;

 var jsonData = JsonConvert.DeserializeObject(result);

那我这里出错了;

var translationItems = jsonData[0];

错误是; '无法将带 [] 的索引应用于 'object' 类型的表达式。有什么想法可以解决这个问题并使这个方法与 Newtonsoft Json 一起执行翻译操作吗?

您忘记将要反序列化的类型传递给:

 var jsonData = JsonConvert.DeserializeObject<List<dynamic>>(result);

反序列化器需要知道它应该创建哪个 .NET 类型的实例,否则它将创建一个 object.