Pregunta

Necesito guardar una lista de objetos, los objetos se crean a partir de una clase que hice. ¿Qué tengo que hacer?

Probé el XMLSerializer y agregué el [xmlelement] a los campos que necesito ser serializados. Pero seguía dándome "Hay un error en el documento XML". También intenté el DataContractSerializer, y utilicé [DataContract] y [DataMember] pero no guardará mis objetos.

Ambas clases de almacenamiento funcionan para elementos básicos (int, bool .. etc.) pero no para mis objetos.

aquí está mi código para guardar:

        using (IsolatedStorageFile saveGameFile = IsolatedStorageFile.GetUserStoreForApplication())
        using (IsolatedStorageFileStream SaveGameStream = new IsolatedStorageFileStream("GemsCollector1.dat", FileMode.OpenOrCreate, saveGameFile))
        {
            XmlSerializer serializer = new XmlSerializer(typeof(List<Card>));
            serializer.Serialize(SaveGameStream, Cards);
        }

Y este para cargar:

        using (IsolatedStorageFile saveGameFile = IsolatedStorageFile.GetUserStoreForApplication())
        using (IsolatedStorageFileStream saveGameStream = new IsolatedStorageFileStream("GemsCollector1.dat", FileMode.OpenOrCreate, saveGameFile))
        {
            if (saveGameStream.Length > 0)
            {
                XmlSerializer serializer = new XmlSerializer(typeof(List<Card>));
                Cards = (List<Card>)serializer.Deserialize(saveGameStream);
            }

        }

mi clase de tarjeta:

public class Card
{
    [XmlElement]
    public CardType CardType { get; set; }

    [XmlElement]
    public CardColor CardColor { get; set; }
    [XmlElement]
    public int Value { get; set; }
    [XmlElement]
    public Vector2 Position { get; set; }
    [XmlElement]
    public PlayerPosition playerPosition { get; set; }
    [XmlElement]
    public CardStatus Status { get; set; }
    public Rectangle BoundingBox
    {
        get
        {
            int width = (playerPosition == PlayerPosition.Left || playerPosition == PlayerPosition.Right) ? 150 : 100;
            int height = (playerPosition == PlayerPosition.Left || playerPosition == PlayerPosition.Right) ? 100 : 150;
            return new Rectangle((int)Position.X, (int)Position.Y, width, height); ;
        }
    }
    [XmlElement]
    public bool isUsed;
    public Vector2 endPosition = new Vector2(235,200);
    public Rectangle ThrowArea = new Rectangle(235, 200, 350, 120);
    [XmlElement]
    public string cardTextureName;
    private string back = "back";
    private static bool ReserveDrag;
    [XmlElement]
    private Vector2 touchFromCenter;
    [XmlElement]
    private int touchId;


    public Card()
    {
    }
}

¿Alguien puede decirme cómo guardamos la lista de objetos definidos por el usuario en XNA?

¿Fue útil?

Solución

Estás intentando serializar las propiedades privadas. Eso no es compatible con Windows Phone 7. que fácilmente podría ser causa del error.

Además, debe asegurarse de que todos los tipos que utilizó para las propiedades también sea serializable y que todos los tipos tengan un constructor vacío.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top