Frage

Ich muss eine Liste von Objekten speichern, die Objekte werden aus einer Klasse erstellt, die ich erstellt habe. was soll ich machen?

Ich habe den XMLSerializer ausprobiert und den Feldern, den ich serialisiert werden muss, die [xmlelement] hinzugefügt. Aber es gab mir immer wieder "Es gibt einen Fehler im XML -Dokument". Ich habe auch den DataContractSerializer ausprobiert und den [DataContract] und [DataMember] verwendet, aber ich wird meine Objekte nicht gespeichert.

Beide Speicherklassen eignen sich für grundlegende Elemente (int, bool .. etc), nicht für meine Objekte.

Hier ist mein Code zum Speichern:

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

und dieser zum Laden:

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

        }

Meine Kartenklasse:

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

Kann mir bitte jemand sagen, wie wir die Liste der benutzerdefinierten Objekte in XNA speichern?

War es hilfreich?

Lösung

Sie versuchen, private Eigenschaften zu serialisieren. Dies wird auf Windows Phone 7 nicht unterstützt, was leicht für den Fehler verursacht werden kann.

Außerdem müssen Sie sicherstellen, dass alle Typen, die Sie für Eigenschaften verwendet haben, auch serialisierbar sind und dass alle Typen einen leeren Konstruktor haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top