2016-06-30 5 views
1

XML 파일이있는 경우 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을 나는 그래서이를 approching에 의해 XML 앞으로 갈 수 있습니다 여기에 작성해야한다 무엇

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

//[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의 요소

내가 XML의 패턴 배열을 읽을 수 오전 XML 파일에서 태그 <AttackPatternLeft>을 제거 할 수 있지만 내가 <AttackPatternLeft> 요소의 자식으로 패턴 배열을 할 때 그것을 읽을 못할 경우
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); 

    } 

    } 

}

+0

예외가 있습니까? TeamContainer의 인스턴스를 XML로 serialize하면 (Pattern 컬렉션에 데이터가 포함되어 있음) 결과 XML 파일이 위와 같은 형식을 취하는가? (모든 직렬화 가능 등록 정보에 대해 올바른 속성을 가지고 있는지 확인하십시오.) – Fredrik

+0

아니오 예외 오류가 발생하지 않습니다. 패턴 배열에 상위 태그 가있을 때 패턴 배열을 얻을 수 없습니다. 그 줄을 제거하면 XML을 읽을 수 있습니다 ..... 여기 위의 질문 주석에 XML을 추가하고 표시하기위한 다른 파일 코드가 있습니다. –

답변

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; } 
}