質問

オブジェクトのリストを保存する必要があります。オブジェクトは、作成したクラスから作成されます。私は何をすべきか?

XMLSerializerを試してみて、[XMLELEMENT]をシリアル化する必要があるフィールドに追加しました。しかし、それは私に「XMLドキュメントにエラーがある」と私に与え続けました。 DataContractSerializerも試してみましたが、[DataContract]と[datamember]を使用しましたが、オブジェクトを保存しません。

両方のストレージクラスは、基本要素(int、bool ..など)で機能しますが、私のオブジェクトでは機能しません。

保存するための私のコードは次のとおりです。

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

そして、これは読み込みのためです:

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

        }

私のカードクラス:

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

XNAのユーザー定義オブジェクトのリストを保存する方法を誰かに教えてもらえますか?

役に立ちましたか?

解決

私有地のシリアル化を試みています。これは、Windows Phone 7ではサポートされていません。これは簡単にエラーの原因となります。

また、プロパティに使用したすべてのタイプもシリアル化可能であり、すべてのタイプが空のコンストラクターを持っていることを確認する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top