Unity中的XML序列化 - 数组是否包含不同的数组项目?

时间:2016-07-29 21:23:15

标签: c# xml unity3d xml-serialization monodevelop

所以我正在使用Unity开发游戏,我遇到了有关XML的问题。我已经设置了一个系统,这要归功于一个允许我通过从XML数据库中读取数据来创建项目的教程。但是有一个问题。我想设置我的XML文件,如下所示:

        <resistance>
            <physical>
                <phy>60.0</phy>
            </physical>

            <air>
                <air>50.0</air>
            </air>
        </resistance>

但是,我还没有找到将root设置为检查数据的方法。

XML文件的格式如下:

    <Item>
        <id>0</id>
        <name>Helmet</name>
        <resistance>
            <physical>
                <phy>60.0</phy>
            </physical>

            <air>
                <air>50.5</air>
            </air>
        </resistance>
    </Item>

[XmlArray(“resistance”),XmlArrayItem(“physical”)]只读取部分。我也尝试过如下编写所有内容:

[XmlArray("resistance"), XmlArrayItem("physical"), XmlArrayItem("phy")]
public float[] phyres;
[XmlArray("air"), XmlArrayItem("air")]
public float[] airres;

但是XML文件变得混乱,虽然数据被读取并且我得到了正确的阻力,之后的内容没有被读取,好像阻力成为XML文件的新的永久根。 提前谢谢。

编辑:换句话说,我希望在我的孩子身上有一个子根,并在那里保留一些不同的数组。

编辑:编辑:谢谢jdweng,这最终写得更简单:

[XmlElement("resistance"), XmlArrayItem("physical")]
public float[] phyres;
[XmlElement("air")]
public float[] airres;

但我仍然遇到同样的问题。 root / namespace设置为,之后将从该命名空间读取所有内容。甚至没有影响它。

1 个答案:

答案 0 :(得分:0)

在我阅读时,您的要求是resistance元素,其中包含physicalair元素。这样:

[XmlElement("resistance"), XmlArrayItem("physical")]
public float[] phyres;
[XmlElement("air")]
public float[] airers;

不代表那个。它意味着resistance元素包含多个physical元素,后跟 air元素。

这是一个镜像XML的类结构:

public class Item
{
    [XmlElement("id")]
    public int Id { get; set; }

    [XmlElement("name")]
    public string Name { get; set; }

    [XmlElement("resistance")]
    public Resistance Resistance { get; set; }
}

public class Resistance
{
    [XmlArray("physical")]
    [XmlArrayItem("phy")]
    public float[] Phyres { get; set; }

    [XmlArray("air")]
    [XmlArrayItem("air")]
    public float[] Air { get; set; }
}