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

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 に答える