2009-08-03 14 views
1

私は12000の値を保持する私のクラスの静的なディシジョンを持っています。私は私のクラスを保存しようとすると静的な辞書をリフレッシュする必要がある、私はいくつかのデータを静的辞書にサーバー側で追加する必要があることを意味します。 Static Dicitionaryに値を追加した後でも、12001ではなく12000の値が保持されています(最後の値は追加されません)。静的メンバーを直列化および逆直列化できません。私は、静的メンバーはオブジェクトの一部ではないので、それがセロライズされないと思う。私はISerializableインターフェイスを実装し、最後のメンバーを追加することができます。しかし、私はそれが良い考えではないと思う。 thtをするより良い方法があります。私はC#のWindowsアプリケーションに取り組んでいます。静的メンバーを直列化および逆直列化する方法

+0

静的な辞書にこれらの値を保存する理由はありますか?あなたはシングルトンパターンを考えましたか? –

+3

'Singleton'は、その単一の目的のために作成された特定のオブジェクトにデータを静的(=グローバル)にするだけです。それはシリアライゼーションの助けにはならない、と私は思う。良い質問が残っています:「静的な辞書にこれらの値を格納する理由はありますか?」あなたがそれを直列化したいのであれば、インスタンスデータになるようです。 – peSHIr

答えて

0

複数の異なるクライアントからサーバーにデータを送信した場合、どのような動作が期待できますか?

クライアントAがアイテムXとYを追加し、クライアントBがアイテムYとZを追加したとします。静的な辞書がアイテムX、Y、Zで終わるようにしたいと思いますYs。

ISerializable実装で特別なコードが必要になると思いますが、それはかなり正当だと思います。

このリストに追加する静的な辞書に追加するときは、「myDictionaryAdditions」のような名前の余分な非静的メンバーリスト変数があります。恐らく、これはサーバーに正しく伝わるでしょう。これで非dupを静的な辞書に転送するためのシリアライザでいくつかのコードが必要になります。

3

シリアル化することができます。ここにコードがあります

[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(); 
    } 
} 
関連する問題