[英]Deserialize XML to object with xmlns namespace problem
您好,我不斷收到錯誤消息:
<ArrayOfThemes xmlnx='http://brickset.com/api/'> was not expected.
嘗試了一些我在互聯網上找到的東西,但都失敗了。
這是我調用SOAP Api時輸出的XML:
<ArrayOfThemes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="https://brickset.com/api/">
<themes>
<theme>4 Juniors</theme>
<setCount>24</setCount>
<subthemeCount>5</subthemeCount>
<yearFrom>2003</yearFrom>
<yearTo>2004</yearTo>
</themes>
</ArrayOfThemes>
課程:
public class Themes
{
[XmlElement("theme")]
public string Theme { get; set; }
[XmlElement("setCount")]
public string SetCount { get; set; }
[XmlElement("subthemeCount")]
public string SubthemeCount { get; set; }
[XmlElement("yearFrom")]
public string YearFrom { get; set; }
[XmlElement("yearTo")]
public string YearTo { get; set; }
}
[Serializable, XmlRoot("ArrayOfThemes")]
public class ArrayOfThemes
{
[XmlElement("themes")]
public Themes Themes { get; set; }
}
然后通常是通常的反序列化代碼。 仍然無法將XML對象轉換為主題列表。
您如何處理xmlns名稱空間?
在反序列化結果之前,可以使用XmlTextReader忽略名稱空間。 同樣,除非您只希望有一個,否則ArrayOfThemes類可能應該有一個主題數組。 下面的示例用於反序列化該xml。
class Program
{
static void Main(string[] args)
{
var xml = @"<ArrayOfThemes xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns=""https://brickset.com/api/"">
<themes>
<theme>4 Juniors</theme>
<setCount>24</setCount>
<subthemeCount>5</subthemeCount>
<yearFrom>2003</yearFrom>
<yearTo>2004</yearTo>
</themes>
</ArrayOfThemes>";
var ms = new MemoryStream(Encoding.UTF8.GetBytes(xml));
var reader = new XmlTextReader(ms) {Namespaces = false};
var serializer = new XmlSerializer(typeof(ArrayOfThemes));
var result = (ArrayOfThemes) serializer.Deserialize(reader);
}
}
public class Themes
{
[XmlElement("theme")]
public string Theme { get; set; }
[XmlElement("setCount")]
public string SetCount { get; set; }
[XmlElement("subthemeCount")]
public string SubthemeCount { get; set; }
[XmlElement("yearFrom")]
public string YearFrom { get; set; }
[XmlElement("yearTo")]
public string YearTo { get; set; }
}
[Serializable, XmlRoot("ArrayOfThemes")]
public class ArrayOfThemes
{
[XmlElement("themes")]
public Themes[] Themes { get; set; }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.