簡體   English   中英

當根節點是 C# 中的字符串時如何反序列化 XML 響應

[英]How to Deserialize a XML response when the root node is a string in C#

Microsoft 認知文本翻譯器 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 包裝在另一個根節點中,這樣我就可以將其解析為一個對象。 但是必須有更好的方法來解決這個問題。

Microsoft Cognitive Text Translator API 提供以下格式的響應

考慮到它始終是具有單個字符串節點的有效 XML 片段,您可以安全地使用

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

使用XElement.Parse解析 XML 字符串時,您不必關心命名空間。

您遇到的問題是命名空間。 如果您使用該序列化器序列化一個值,您將得到:

<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);
}

有關工作演示,請參閱此小提琴

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM