2

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

私はXmlSerializerを試しましたが、私はシリアル化する必要があるフィールドに[XmlElement]を追加しました。しかし、それは私に "XML文書に誤りがあります"ということを与え続けました。 私はDataContractSerializerも試してみましたが、私は[DataContract]と[DataMember]を使用しましたが、私のオブジェクトは保存されません。

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

HERESに私の節約のためのコード:

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

およびロードするため、この1:

 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のユーザー定義オブジェクトの?

+0

電話機のIsolatedStorageに保存しようとしていますか?もしそうなら、おそらくシリアル化コードを投稿するべきです。 –

+0

はい、IsolatedStroageに、私はちょうど私のコードを追加しました – Ateik

+0

そう、エラーは、シリアル化しようとしている "カード"オブジェクトに関連しています。クラスプロパティをシリアライズ可能にしていないと思ってもいいと思います。だからあなたはここでもCardクラスを投稿しなければなりません。 –

答えて

1

プライベートプロパティをシリアル化しようとしています。これはWindows Phone 7ではサポートされていません。簡単にエラーが発生する可能性があります。

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

+0

大丈夫ですが、Enum、どうすればそれらをシリアル化可能としてマークできますか? – Ateik

+0

列挙型はデフォルトでシリアル化可能です。また、クラスがシリアライズ可能である場合、メンバーを明示的にマークする必要はありません。 –

+0

ありがとうございます!それは今働く! :) – Ateik

関連する問題