Profiel van IanSilverlight for BusinessFoto'sWeblogLijstenMeer Extra Help

Weblog


    27 november

    Serializing Objects to Isolated Storage in Silverlight 2

    Silverlight 2 does not have a BinaryFormatter like the full framework does so you have to take a different approach to serializing data to Isolated Storage.

    However there is a simple solution by using the DataContractSerializer.  You will need to add a reference to System.Runtime.Serialization.  This will serialize the object to an Xml format and is what Silverlight uses when you add a service reference.

    So if we have an object called Person, we can use the DataContract and DataMember attributes to mark it up as follows:

    [DataContract]
    public class Person
    {
        [DataMember]
        public int PersonId { get; set; }
        [DataMember]
        public string Name { get; set; }
        
    }

    You can then use the DataContractSerializer as follows to save Person data to Iso storage:

    Person p = new Person() { PersonId = 1, Name = "Fred" };
    using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForSite())
    {
        IsolatedStorageFileStream stream = store.CreateFile("Person.dat");
        DataContractSerializer serializer = new DataContractSerializer(typeof(Person));
        serializer.WriteObject(stream, p);
        stream.Close();
    }
    MessageBox.Show("Data Saved");

    And the following to read it:

    Person p;
    using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForSite())
    {
        IsolatedStorageFileStream stream = store.OpenFile("Person.dat", FileMode.Open);
        DataContractSerializer serializer = new DataContractSerializer(typeof(Person));
        p = (Person)serializer.ReadObject(stream);
        stream.Close();
    }
    MessageBox.Show("Data Loaded");
    TextBlock1.Text = p.Name + " " + p.PersonId;

    If you want to make this more generic you could create a generic method as follows:

    private void SaveData<T>(T dataToSave,string fileName)
    {
        using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForSite())
        {
            IsolatedStorageFileStream stream = store.CreateFile(fileName);
            DataContractSerializer serializer = new DataContractSerializer(typeof(T));
            serializer.WriteObject(stream, dataToSave);
            stream.Close();
        }
    }

    Then you can call it as follows:

    SaveData<ObservableCollection<Person>>(people, "People.dat");
    SaveData<Person>(person, "Person.dat");
    

    Cheers

    Ian

    Reacties

    Een ogenblik geduld...
    De reactie die je hebt ingevoerd is te lang. Maak hem iets korter.
    Je hebt niets ingevoerd. Probeer het opnieuw.
    We kunnen je reactie nu niet toevoegen. Probeer het later opnieuw.
    Je hebt toestemming van je ouders nodig om een reactie toe te voegen Toestemming vragen
    Je kunt geen reacties geven omdat je ouders dit hebben uitgeschakeld.
    We kunnen je reactie nu niet verwijderen. Probeer het later opnieuw.
    Je hebt het maximale aantal reacties overschreden dat je elke dag kunt versturen. Probeer het over 24 uur nog eens.
    De mogelijkheid om reacties te geven is uitgeschakeld voor je account omdat onze systemen aangeven dat je spam naar andere gebruikers verzendt. Als je van mening bent dat je account ten onrechte is uitgeschakeld, kun je contact opnemen met de klantondersteuning van Windows Live.
    Voer de beveiligingscontrole hieronder uit om een reactie achter te laten.
    De tekens die je typt moeten overeenkomen met die in de afbeelding of het audiofragment.

    Meld je aan bij Windows Live ID om een reactie toe te voegen (als je Hotmail, Messenger of Xbox LIVE gebruikt, heb je al een Windows Live ID). Aanmelden


    Heb je geen Windows Live ID? Maak er nu een aan

    Links naar je weblog (2)

    De URL voor de link naar dit weblogitem is:
    http://blackburnian.spaces.live.com/blog/cns!FB8B852EF1AB0B35!1107.trak
    Weblogs die naar dit item verwijzen
    *