Generische Listen Offline Speichern

Es ist schon spät nachts und entsprechend kurz mein Silverlight Beispiel. Es geht darum eine Liste von Objekten (generische Liste) zu serialisieren und dann in den Isolatedstorage zu legen. Erstens verzichte ich willentlich auf Datacontract und Datamember attribute und zweitens auf das Isolatedstoragefile.

Also eigentlich mache ich es falsch oder besser gesagt. Es gibt andere Lösungswege.

Ich speichere in das Isolatedstoragesettings Dictionary.  Durch die Verwendung des Json Serializers und der Unicode codierung reduziert sich der Platzbedarf auf ein Minimum. 

Dim iso As IsolatedStorageSettings = IsolatedStorageSettings.SiteSettings
Dim o As List(Of diggies) = DataGrid1.ItemsSource
Using ms As MemoryStream = New MemoryStream()
     Dim dc As New DataContractJsonSerializer(GetType(List(Of diggies)))
     dc.WriteObject(ms, o)
     Dim array() As Byte = ms.ToArray()
     iso("hannes") = Encoding.Unicode.GetString(array, 0, array.Length)
End Using

Das lesen aus dem Store genau anders rum.

Dim iso As IsolatedStorageSettings = IsolatedStorageSettings.SiteSettings
Dim dc As New DataContractJsonSerializer(GetType(List(Of diggies)))
Dim b As Byte() = Encoding.Unicode.GetBytes(iso("hannes"))
Using ms As MemoryStream = New MemoryStream(b)
     Dim o As List(Of diggies) = dc.ReadObject(ms)
     DataGrid1.ItemsSource = o
End Using

Kommentare (1) -

  • hey. Bei den ganzen no-sql Datenbanken wird auch gerne JSON gespeichert. Allerdings verwenden die Leute dort gerne das OpenSource Paket json.net (gibt es via NuGet). Ist anscheinend um einiges performanter und bleibt ein Einzeiler.

    string data = JsonConvert.SerializeObject(o);

    bzw.

    List<diggies> o = JsonConvert.DeserializeObject<List<diggies>>(data);

    Grüße michl

Kommentar schreiben