簡體   English   中英

C#-序列化和反序列化靜態成員

[英]C# - Serializing and deserializing static member

我的課堂上有一個靜態字典,可容納12000個值。 當我嘗試保存類時,需要刷新並在服務器端的靜態字典中添加一些數據。

問題在於,將值添加到靜態字典之后,它仍然保留12000個值,而不是12001(最后一個值未添加)。 它無法序列化和反序列化靜態成員。

我認為,由於靜態成員不是對象的一部分,因此不會被序列化。 我可以實現ISerializable接口並添加最后一個成員。 但是我認為這不是一個好主意。

有更好的方法嗎? 我正在使用C#Windows應用程序。

您可以序列化。 這是一個代碼,

[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();
   }
}

如果您將數據從幾個不同的客戶端發送到服務器,您會期望什么行為?

假設客戶A添加了項目X和Y,而客戶B添加了項目Y和Z。我猜想您希望靜態字典以項目X,Y和Z結尾,而不是兩個Y。

我認為您需要在ISerializable實現中使用特殊代碼,這是很合理的。

每當我將靜態字典添加到此列表時,我都會有一個名為“ myDictionaryAdditions”的額外非靜態成員列表變量。 大概這將正確傳輸到服務器。 現在,您只需要在反序列化器中添加一些代碼即可將非重復數據傳輸到靜態字典。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM