Salvataggio di un elenco di oggetti in Windows Phone 7 XNA
Domanda
ho bisogno di salvare un elenco di oggetti, gli oggetti sono creati da una classe che ho fatto. che cosa devo fare?
Ho provato il XmlSerializer, e ho aggiunto il [XmlElement] per i campi ho bisogno di essere serializzato. ma continuava a darmi "C'è un errore nel documento XML". Ho provato anche la DataContractSerializer, e ho usato il [DataContract] e [DataMember] ma non lo salvare i miei oggetti.
entrambe le classi di memoria di lavoro per elementi di base (int, bool .. ecc) ma non i miei oggetti.
Heres il mio codice per il salvataggio:
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);
}
e questo per il carico:
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);
}
}
La mia classe Carta:
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()
{
}
}
Qualcuno può dirmi come abbiamo Salva lista di oggetti definiti dall'utente in XNA?
Soluzione
Si sta tentando di serializzare proprietà private. Questo non è supportato su Windows Phone 7. Il che potrebbe facilmente essere la causa per l'errore.
Inoltre, è necessario assicurarsi che tutti i tipi che avete usato per le proprietà, è anche serializeable, e che tutti i tipi hanno un costruttore vuoto.