如果数组具有父标记,则无法读取XML数组

时间:2016-06-30 07:26:26

标签: c# xml unity3d

XML文件:

<AttackPattern>
  <AttackPatternLeft>
    <Pattern>
      <Player Id="GK">
        <PositionX>0.0</PositionX>
        <PositionY>0.0</PositionY>
      </Player>
      <Player Id="DL">
        <PositionX>0.0</PositionX>
        <PositionY>1.0</PositionY>
      </Player>
      <Player Id="DR">
        <PositionX>0.0</PositionX>
        <PositionY>2.0</PositionY>
      </Player>
      <Player Id="MDFL">
        <PositionX>0.0</PositionX>
        <PositionY>3.0</PositionY>
      </Player>
      <Player Id="MDFR">
        <PositionX>0.0</PositionX>
        <PositionY>4.0</PositionY>
      </Player>
    </Pattern>
  </AttackPatternLeft>
</AttackPattern>

TeamContainer.cs

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Xml;
using System.Xml.Serialization;
using System.IO;

[XmlRoot("AttackPattern")]
public class TeamContainer
{

我应该在这里写什么,以便我可以通过查询子数组或AttackPatternLeft元素来继续XML;

    //[XmlElement("AttackPatternLeft")]
    [XmlArray("Pattern")]
    [XmlArrayItem("Player")]
    public List<Team> listTeam = new List<Team> ();

    // Use this for initialization
    public static TeamContainer Load(string path) 
    {

        TextAsset lobjTextAssetXML = Resources.Load<TextAsset>(path);
        XmlSerializer serializer = new XmlSerializer (typeof(TeamContainer));

        StringReader reader = new StringReader (lobjTextAssetXML.text);
        TeamContainer lobjTeamContainer = serializer.Deserialize (reader) as TeamContainer;

        reader.Close();

        return lobjTeamContainer;
    }
}

TeamLoader.cs

 using UnityEngine;
 using System.Collections;

 public class TeamLoader : MonoBehaviour {

public const string path = "AttackPattern";
// Use this for initialization
void Start () {

    TeamContainer lobjTeamContainer = TeamContainer.Load (path);

    //print ("check->"+ lobjTeamContainer.listTeam.Count);
    foreach (Player lobjPlayer in lobjTeamContainer.listTeam) {
        print ("------------------------");
        print (lobjPlayer.strID);
        print (lobjPlayer.fPositionX);
        print (lobjPlayer.fPositionY);

    }

  }

}

如果我从XML文件中删除标记<AttackPatternLeft>,我能够以XML格式读取Pattern数组,但是当我将模式数组作为<AttackPatternLeft>元素的子元素

1 个答案:

答案 0 :(得分:0)

您必须使用以下一组类:

[XmlRoot("AttackPattern")]
public class TeamContainer
{
    public AttackPatternLeft AttackPatternLeft { get; set; }
}

public class AttackPatternLeft
{
    [XmlArray("Pattern")]
    [XmlArrayItem("Player")]
    public List<Player> Team { get; set; }
}

public class Player
{
    public decimal PositionX { get; set; }
    public decimal PositionY { get; set; }
    [XmlAttribute]
    public string Id { get; set; }
}