2011-04-18 43 views
5

我正在寫一個c#項目,我想反序列化一個類型爲int []的字段的對象,我想以另一種方式進行反序列化。從XML文件反序列化int數組

說我有一個類:

class Player 
{ 
    public string Name; 
    public int[] Spells; 
} 

而一個xml文件從我反序列化類播放器的一個實例:

<Player> 
    <Name>John</Name> 
    <Spells> 
    <int>1</int> 
    <int>5</int> 
    <int>9</int> 
    </Spells> 
</Player> 

事情是我不希望這樣的xml文件看起來像這樣,我希望它更像這樣:

<Player> 
    <Name>John</Name> 
    <Spells>1 5 9</Spells> 
</Player> 

我使用XmlSerializer,它只反序列化該字段只在第一次讀取表單時纔會拼寫xml。我想知道這是否是一種像簡單字段那樣反序列化int數組的方法。

+0

所以你想一個空格分隔的列表,而不是一個XML的array – Jodrell 2011-04-18 11:38:25

回答

7

其中一種方式可能是創建另一個屬性,該屬性將以空格分隔集爲序列化目的。例如,

class Player 
{ 
    public string Name; 

    [XmlIgnore] 
    public int[] Spells; 

    [XmlElement("Spells") 
    public string SpellsString 
    { 
    get 
    { 
     // array to space delimited string 
    } 
    set 
    { 
     // string to array conversion 
    } 
    } 
} 
+0

謝謝,這就是我一直在尋找的! – Stefan 2011-04-18 12:34:32

2
class Player 
{ 
    public string Name { get; set; } 
    public string SpellData { get; set; } 

    public int[] Spells() { 
     return SpellData.Split(" ").select(n=>int.parse(n)).ToArray(); 
    }; 
} 

類似的東西會讓你的XML數據看你想要的方式,因爲在弦上,而不是功能將被序列化。但爲什麼你關心你的XML看起來像什麼?其他的XML更清潔。

+0

我希望xml看起來像這樣,因爲在我的項目中,我讀取地圖的碰撞層,並且查看由空格分隔的矩陣元素而不是「」更好。 – Stefan 2011-04-18 12:08:12

1

如果你存儲在一個空間分隔字符串法術在XML,可以使用下面的代碼將其轉換爲一個整數列表:

var spellsAsIntegers = 
spellsAsString.Split(' ').Select(n => int.Parse(n)).ToList();