2011-04-18 13 views
5

Estoy escribiendo un proyecto C# y estoy tratando de deserializar un objeto que tiene un campo de tipo int [] y quiero hacer la deserialización de otra manera.Deserializar arreglos int del archivo XML

decir que tengo una clase:

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

Y un archivo XML desde el que i Deserialize una instancia de la clase del jugador:

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

la cosa es que no quieren que el archivo XML para parecerse a eso, yo quiero que sea de la misma familia:

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

estoy usando XmlSerializer y sólo Deserialize el campo Spells solo cuando se lee el primer xml. Me pregunto si es una manera de deserializar una matriz int al igual que un campo simple.

+0

por lo que le gustaría una lista de espacio delimitado en lugar de un xml array – Jodrell

Respuesta

7

Una de las formas podría ser crear otra propiedad que requiera espacio delimitado para fines de serialización. Por ejemplo,

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

¡Gracias, esto es lo que estaba buscando! – Stefan

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

Algo así como que hará que sus datos XML el aspecto que desea, ya que en la cadena y no la función podría ser serializado. Pero, ¿por qué te importa cómo se ve tu xml? El otro xml es mucho más limpio.

+0

Quiero que el xml se vea así porque en mi proyecto leo una capa de colisión para un mapa y es mucho mejor ver los elementos de la matriz delimitados por espacios en lugar de "". – Stefan

1

Si almacena los hechizos en una cadena delimitada por espacios en el XML, puede utilizar el siguiente código para convertirlo en una lista de números enteros:

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