Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Duda con XML y carga de datos

Iniciado por dari, 02 de Diciembre de 2010, 11:42:46 AM

« anterior - próximo »

dari

Buenas,

No sabia muy bien que titulo poner a la duda, pero bueno.

Mi problema es el siguiente, quiero cargar datos de un XML pero no se como especificar una lista de listas, es decir, yo tengo:

public class Datos
{
     public string Nombre;
     public int Numero;

     public Datos(string _Nombre, int _Numero)
     {
          Nombre = _Nombre; Numero = _Numero;
     }
}

y lo cargo como Datos d = Content.Load<Datos>("NombreArxivo");

Donde NombreArxivo es un XML:
<?xml version="1.0" encoding="utf-8" ?>
<XnaContent>
  <Asset Type="Datos">
    <Nombre>Hola</Nombre>
    <Numero>0</Numero>
  </Asset>
</XnaContent>

El problema viene que yo ahora quiero añadir un campo que sea un List<List<Point>> y no tengo ni idea de como añadir eso al XML. He probado de la siguiente manera:

List<List<Point>> ListaListaPuntos; (en la clase y añadirlo al constructor)
<ListaListaPuntos> ??? </ListaListaPuntos> (en el xml)

Resumiendo, no se como poner en el XML una lista de lista de puntos, o como podria solucionar este problema haciendolo de otra manera. Intente haciendo un struct que fuera una lista de puntos y poner una lista de esta clase, pero tampoco me funciono :S

        public struct OleadasUnidades
        {
            List<Point> UnidadesDeOleada;
        }

        public List<OleadasUnidades> ListaOleadas;


Pero tanto asi:
    <ListaOleadas>
      <OleadasUnidades></OleadasUnidades>
        <OleadasUnidades></OleadasUnidades>
    </ListaOleadas>

Como asi:
    <ListaOleadas>
      <UnidadesDeOleada></UnidadesDeOleada>
        <UnidadesDeOleada></UnidadesDeOleada>
    </ListaOleadas>

Me da el error de  There was an error while deserializing intermediate XML. 'Element' is an invalid XmlNodeType.

Alguien sabe donde lo estoy haciendo mal? Es la primera vez que cargo datos des de XML y esto me esta trayendo por la calle de la amargura :p

Un saludo y gracias a todos

[EX3]

Para evitarte problemas y quebraderos de cabeza yo utilizaría el código de este ejemplo de la MSDN para generar los XML de cualquier estructura que definas. Este código genera el XML con el formato que después reconoce el importador del Content, y de paso, hasta te puedes evitar tener que hacerte los XML a mano pudiendo hacerte inclusive un editor:
http://msdn.microsoft.com/en-us/library/ff604982.aspx

Importante y a tener en cuenta, este código no te vale para proyectos de XBox y supongo que tampoco Windows Phone 7 ya que tira de una librería que no soporta el target por defecto de los proyectos XNA 4.0, .NET Framework 4.0 Client profile (cosa que el articulo no menciona y me tuvo una semana dando vueltas) y que el archivo resultante no lo genera ni en el proyecto del Content ni en el sistema de almacenamiento de XNA, el archivo lo genera en un directorio que tu le indiques. Para poder agregar la referencia en el proyecto Windows cámbialo a .NET Framework 4.0 y busca la referencia Microsoft.Xna.Framework.Content.Pipeline que dice el ejemplo. Con esto ya te debe funcionar el código.

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

dari

Buenas,

Muchas gracias por responder. En tu segunda parte no me queda claro si me dices que "por defecto" no funciona por Xbox/WP7 y con lo que me dices si funciona o que de ninguna manera no funciona para Xbox/WP7.

Precisamente la idea del juego es para WP7 y luego para Xbox, asi que espero que sea lo primero. Ahora despues de comer me lo miro con tranquilidad

Muchas gracias

[EX3]

#3
No, a ver, el código este es solo para generar los XML, por ejemplo desde una aplicación XNA para Windows. Yo por ejemplo estoy haciendo un juego en el que la versión Windows tendrá la funcionalidad también de editor y desde ahí poder generar la información en XML que luego puedo usar en la XBox, dicese, animaciones, niveles del juego, etc.... El problema es que este código no me serviria por ejemplo para generar XML durante el juego por que no genera el archivo dentro del proyecto del Content ni vale tampoco para generarlo en los Storages que usa XNA. El XML que generes luego lo agregas al Content de tu juego y este te servira para Windows, XBox y Windows Phone 7 sin problemas. Lo de "por defecto" es por que el target del framework al que apuntan los proyectos de XNA 4.0, versión Windows incluida, no listan el namespace y su referencia que necesitas para el código.

Piensa en este código mas como una herramienta para conocer que estructura tendrá el XML de una clase que serialices, como es tu caso, a un metodo para serializar datos desde el juego :)

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

dari

Ah ok, perfecto

Luego lo miro con calma pues :) Muchas gracias

dari

Muchas gracias, funciona perfectamento y me ira perfecto para poder hacerlo todo mediante XML

Al final, por si le sirve a alguien, la estructura de una "list<list<Point>> Nombre" es:

<Nombre>
  <Item>0 0 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9</Item>
  <Item>1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9</Item>
  <Item>2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9</Item>
  <Item>3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9</Item>
  <Item>4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9</Item>
  </Nombre>

Vamos, que separa una lista de la otra con "Item"

Y para poder usar el ejemplo que dice [EX3] hay que cambiar el "Target framework" a ".NET Framework 4" en las propiedades del proyecto, como bien decia antes el.


[EX3]

Genial, de nada :)

Ya te dije que te ibas a quitar quebraderos de cabeza con este código, a mi desde luego me ayudo mucho :D

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.