簡體   English   中英

將XML反序列化為具有xmlns名稱空間問題的對象

[英]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.

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