2009-08-03 10 views
1

Ich habe eine statische Dictionary in meiner Klasse, die 12000 Werte halten. Wenn ich versuche, meine Klasse zu speichern, muss ich das statische Wörterbuch aktualisieren, ich meine, ich muss einige Daten in Static Dicitionary auf der Serverseite hinzufügen. Das Problem besteht darin, dass nach dem Hinzufügen der Werte in Static Dicitionary immer noch 12000 Werte gespeichert werden, nicht 12001 (der letzte wird nicht hinzugefügt). Das statische Element kann nicht serialisiert und deserialisiert werden. Ich denke, da statische Elemente nicht Teil des Objekts sind, werden sie nicht seralisiert. Ich kann ISerializable Schnittstelle implementieren und das letzte Mitglied hinzufügen. aber ich denke, es ist keine gute Idee. Gibt es einen besseren Weg, dies zu tun? Ich arbeite an C# Windows-Anwendung.Wie serialisiert und deserialisiert man statische Member

+0

Gibt es einen Grund, warum Sie diese Werte in einem statischen Wörterbuch speichern? Hast du das Singleton-Muster berücksichtigt? –

+3

Ein 'Singleton' ist" nur "das Setzen von Daten statisch (= global) in ein bestimmtes Objekt, das für diesen Zweck erstellt wurde. Es wird nicht mit der Serialisierung helfen, denke ich. Gute Frage bleibt: "Gibt es einen Grund, warum Sie diese Werte in einem statischen Wörterbuch speichern?" wie es scheint, wirklich Instanzdaten zu sein, wenn Sie es serialisieren möchten. – peSHIr

Antwort

0

Welches Verhalten würden Sie erwarten, wenn Sie Daten aus mehreren verschiedenen Clients an den Server gesendet?

Angenommen, Client A hätte die Elemente X und Y hinzugefügt, und Client B hätte die Elemente Y und Z hinzugefügt. Ich nehme an, dass die statische Dictionazry mit den Elementen X, Y und Z enden soll, aber nicht mit zwei Ys.

Ich denke, dass Sie spezielle Code in Ihrer ISerializable-Implementierung benötigen, und ich denke, das ist durchaus legitim.

Ich hätte eine zusätzliche nicht-statische Member-Liste Variable so etwas wie „myDictionaryAdditions“ genannt, wann immer ich zu statischem Wörterbuch füge ich zu dieser Liste hinzufügen würde. Vermutlich wird dies korrekt auf den Server übertragen. Jetzt brauchen Sie nur einen Code im De-Serializer, um Nicht-Duplikate in das statische Wörterbuch zu übertragen.

3

Sie können serialisieren. Hier ist ein Code,

[Serializable ] 
public class Numbers 
{ 
    public int no; 
    public static int no1; 
} 
class Test 
{ 
    static void Deser() 
    { 
     Numbers a; 
     FileStream fs = new FileStream("a1.txt", FileMode.Open); 
     System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bs = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); 
     a = (Numbers)bs.Deserialize(fs); 
     Numbers.no1 = (int)bs.Deserialize(fs); 
     fs.Close(); 
     Console.WriteLine(a.no + " " + Numbers.no1); 
    } 
    static void Ser() 
    { 
     Numbers a = new Numbers(); 
     a.no = 100; 
     Numbers.no1 = 200; 

     FileStream fs = new FileStream("a1.txt", FileMode.Create); 
     System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bs = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); 
     bs.Serialize(fs, a); 
     bs.Serialize(fs, Numbers.no1); 
     fs.Close(); 
    } 
} 
Verwandte Themen