API Microsoft Translator 异常:“根级别的数据无效。第 1 行,位置 1。”

Posted

技术标签:

【中文标题】API Microsoft Translator 异常:“根级别的数据无效。第 1 行,位置 1。”【英文标题】:API Microsoft Translator Exception: "The data at the root level is invalid. Line 1, position 1." 【发布时间】:2021-03-24 13:08:06 【问题描述】:

我正在将微软翻译从 v2 迁移到 v3。 但我收到以下异常:

反序列化 System.String 类型的对象时出错。根级别的数据无效。第 1 行,位置 1。 (System.Runtime.Serialization.SerializationException)

内部异常:根级别的数据无效。第 1 行,位置 1。 System.Exception System.Xml.XmlException

此错误发生在这行代码上:

translation.Append((string)dcs.ReadObject(response));

完整方法:

public string TranslateText(string from, string to, string text)

        var token = string.Empty;

        try
        
            retryPolicy.Execute(() =>
            
                token = azureAuthentication.GetAccessToken();
            );

            var translation = new StringBuilder();
            int charLength = Configuration.Configuration.CharLength;

            List<string> lines = text.Split('.').Aggregate(new[]  "" .ToList(), (a, x) =>
            
                var last = a[a.Count - 1];

                if ((last + x).Length > charLength)
                
                    a.Add(x);
                
                else
                
                    a[a.Count - 1] = ($"lastx.");
                

                return a;
            );
            
            foreach (var str in lines)
            
                string uri =$"https://api.cognitive.microsofttranslator.com/languages?api-version=3.0&scope=translation&textType=HttpUtility.UrlEncode(str)&from=from_lang&to=to_lang";
                var httpWebRequest = (HttpWebRequest)WebRequest.Create(uri);
                httpWebRequest.Headers.Add("Authorization", token);

                try
                
                    retryPolicy.Execute(() =>
                    
                        using (var response = httpWebRequest.GetResponse().GetResponseStream())
                        
                            var dcs = new DataContractSerializer(Type.GetType("System.String"));
                            translation.Append((string)dcs.ReadObject(response));
                        
                    );

                
                catch (Exception ex)
                
                    throw new ExternalServiceUnavailableException(ex.Message, ex);
                
            

            return translation.ToString();
        
        catch(Exception ex)
        
            throw new ExternalServiceUnavailableException(ex.Message, ex);
        
 

我不知道为什么会发生此错误。我查看了有关此错误的其他问题,但我不确定如何在此处实施这些解决方案。

谢谢

【问题讨论】:

docs.microsoft.com/en-us/azure/cognitive-services/translator/… 【参考方案1】:

我认为您的请求中有错误,因此反序列化失败。 我觉得这部分 from=from_lang&amp;to=to_lang 应该 from=from_lang&amp;to=to_lang

您设置为 from_lang 的文字字符串,而不是有效语言的名称,例如 en 或 es。

【讨论】:

以上是关于API Microsoft Translator 异常:“根级别的数据无效。第 1 行,位置 1。”的主要内容,如果未能解决你的问题,请参考以下文章

在Application中集成Microsoft Translator服务之使用http获取服务

在Application中集成Microsoft Translator服务之开发前准备

在Application中集成Microsoft Translator服务之优化

AI Translator | Microsoft gets offline AI-powered translations

Microsoft Translator:打破语言障碍 拓展全球沟通新机遇

在Application中集成Microsoft Translator服务之获取访问令牌