2016-07-29 11 views
0

Итак, я работаю над своей игрой в Unity, и у меня возникла проблема с XML. Я установил систему благодаря учебному пособию, который позволяет мне создавать элементы, читая их данные из базы данных XML. Но есть одна проблема. Я хочу, чтобы настроить свой файл XML, чтобы читать следующим образом:XML-сериализация в единстве. Имеет ли массив различные массивы?

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

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

Однако я не нашел способ, чтобы установить, как корень, чтобы проверить данные в

Формат XML. файл выглядит следующим образом:

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

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

[XmlArray ("сопротивление"), XmlArrayItem ("физический")] читает только часть. Я также пытался писать все следующим образом:

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

Но тогда файл XML получил грязный, хотя данные читались и я получил правильные сопротивления, что последовало за не прочитанных, как если бы сопротивление стало новое корень управления XML-файлом. Спасибо заранее.

Редактировать: Другими словами, я хочу иметь подкрот в моем ребенке и держать там несколько разных массивов.

Edit: Edit: Спасибо jdweng, это в конечном итоге более просто написать:

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

Но я все еще получаю один и тот же вопрос. У корня/пространства имен установлено значение, и после этого все считывается из этого пространства имен. Даже после этого не влияет.

+0

Изменить XmlArray к XmlElement. XmlElement будет работать с массивами и устранять один уровень ненужных тегов. – jdweng

+0

@jdweng Похоже, я получаю тот же результат, что и последний фрагмент кода. Корневые изменения этого элемента и каждого элемента после этого выполняются в . Как я могу восстановить корень до после считывания данных из элемента сопротивления? – lightingft

+0

Вы должны добавить сопротивление к элементу, используя XML (ы) или в своих классах. – jdweng

ответ

0

Как я прочитал, ваше требование - это элемент resistance, который содержит physical и элемент air. Это:

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

Это не означает. Он подразумевает элемент resistance, содержащий несколько элементов physical, а затем a 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; } 
} 
+0

Ах, да, я подумал об этом методе, но не решался попробовать. Даже если я этого больше не требую, это будет очень полезно в будущем. Спасибо! – lightingft