1

Microsoft Cognitive Text Translator API 提供以下格式的响应:

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">nl</string>

我试图用以下代码反序列化它:

var serializer = new XmlSerializer(typeof(string));
var stringReader = new StringReader(xmlResult); // xmlResult is the xml string above
var textReader = new XmlTextReader(stringReader);
var result = serializer.Deserialize(textReader) as string;

但这会导致异常:

System.InvalidOperationException:XML 文档中存在错误 (1, 23)。---> System.InvalidOperationException:不是预期的。

我正在考虑将 api 响应 xml 包装在另一个根节点中,这样我就可以将它解析为一个对象。但是必须有更好的方法来解决这个问题。

4

2 回答 2

3

Microsoft Cognitive Text Translator API 提供以下格式的响应

考虑到它始终是具有单个字符串节点的有效 XML 片段,您可以安全地使用

var result = XElement.Parse(xmlResult).Value;

使用 解析 XML 字符串时XElement.Parse,您不必关心名称空间。

于 2016-11-09T11:40:15.883 回答
1

您遇到的问题是名称空间。如果您使用该序列化程序序列化一个值,您将获得:

<string>nl</string>

因此,将默认命名空间设置为 XML 中的命名空间:

var serializer = new XmlSerializer(typeof(string),
     "http://schemas.microsoft.com/2003/10/Serialization/");

并使用它:

using (var reader = new StringReader(xmlResult))
{
    var result = (string)serializer.Deserialize(reader);
}

请参阅此小提琴以获取工作演示。

于 2016-11-09T10:28:37.883 回答