反序列化数组数组

Deserialize array of arrays

我是连载新手,正在尝试解决这个问题: 我有这个 xml 文件

<Database>
<Castle>
    <Tower>
        <Roof>
            <Color>red</Color>
        </Roof>
        <Roof>
            <Color>blue</Color>
        </Roof>
        <Roof>
            <Color>pink</Color>
        </Roof>
    </Tower>
    <Tower>
        <Roof>
            <Color>green</Color>
        </Roof>
        <Roof>
            <Color>black</Color>
        </Roof>
    </Tower>
</Castle>

我正在尝试从我的 xml 文件中获取数据并将其放入我的 类 结构中,如下所示:

class Castle{ // I want this to fill with tower[0] and tower[1]
    public Towers[] tower;  
}

class Towers{ // I want this to fill with tower[0].roof[0], tower[0].roof[1], tower[0].roof[2] and tower[1].roof[0], tower[1].roof[1]
    public Roofs[] roof;  
}

class Roofs{ // And finally I want to be able co call tower[1].roof[1] and get variable "black"
    public string color;
}

为此我使用了这个函数:

public static Castle Load(string path)
{
    var serializer = new XmlSerializer(typeof(Castle));
    using(var stream = new FileStream(path, FileMode.Open))
    {
        return serializer.Deserialize(stream) as Castle;
    }
}

我的问题是,我无法正确设置 XmlArray 和 XmlArrayItem 以从我的 xml 获取数据。你能给我一些解决问题的建议吗?

使用注解在xml:

中获取准确的节点名称
 [Serializable]
public class Castle
{ 
    [XmlElement("Tower")]
    public Towers[] tower;
}

public class Towers
{ 
    [XmlElement("Roof")]
    public Roofs[] roof;
}

public class Roofs
{ 
    [XmlElement("Color")]
    public string color;
}

当我从您的 xml 中删除初始 [Database] 节点时,这对我来说很好用,因为它使 xml 无效。