C# - 序列化和反序列化静态成员

时间:2009-08-03 05:17:21

标签: c# serialization

我的班级里有一个静态字典,它包含12000个值。当我尝试保存我的类时,我需要刷新并在服务器端的静态字典中添加一些数据。

问题是,在将值添加到静态dicitionary后,它仍然保留12000个值,而不是12001(最后一个不添加)。它无法序列化和反序列化静态成员。

我认为,因为静态成员不是对象的一部分,所以它不会被分解。我可以实现ISerializable接口并添加最后一个成员。但我认为这不是一个好主意。

有没有更好的方法呢?我正在研究C#Windows应用程序。

2 个答案:

答案 0 :(得分:4)

您可以序列化。这是一个代码,

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

答案 1 :(得分:0)

如果您将数据从多个不同的客户端发送到服务器,您会期望什么行为?

假设客户A添加了项目X和Y,客户B添加了项目Y和Z.我猜你想要静态词典最终得到项目X,Y和Z,但不是两个Ys

我认为您需要在ISerializable实现中使用特殊代码,我认为这是非常合法的。

当我添加到静态字典时,我会添加一个名为“myDictionaryAdditions”的额外非静态成员列表变量,我将添加到此列表中。据推测,这将被正确地传递给服务器。现在,你只需要一些反序列化器中的代码就可以将非重复数据传输到静态字典中。