2009-08-03 4 views
1

У меня есть статический dicitionary в моем классе, который содержит 12000 значений. когда я пытаюсь сохранить свой класс, мне нужно обновить статический словарь, я имею в виду, что мне нужно добавить некоторые данные в Static Dicitionary на стороне сервера. проблема заключается в том, что после добавления значений в Static Dicitionary он по-прежнему сохраняет 12000 значений, а не 12001 (последний не добавляется). он не может сериализовать и десериализовать статический член. я думаю, поскольку статический член не является частью объекта, поэтому он не становится серализованным. Я могу реализовать интерфейс ISerializable и добавить последний элемент. но я думаю, что это не очень хорошая идея. есть лучший способ сделать tht. Я работаю над приложением windows C#.как сериализовать и десериализовать статический член

+0

Есть ли причина, по которой вы храните эти значения в статическом словаре? Вы считали шаблон Singleton? –

+3

«Синглтон» «просто» помещает данные static (= global) в конкретный объект, созданный для этой единственной цели. Думаю, это не поможет с сериализацией. Хороший вопрос остается: «Есть ли причина, по которой вы сохраняете эти значения в статическом словаре?» поскольку, по-видимому, это действительно данные экземпляра, если вы хотите сериализовать его. – peSHIr

ответ

0

Какое поведение вы ожидали бы, если бы вы отправили данные с нескольких разных клиентов на сервер?

Предположим, что клиент A добавил элементы X и Y, а клиент B добавил элементы Y и Z. Я предполагаю, что вы хотите, чтобы статическая диктатура закончила с элементами X, Y и Z, но не с двумя Ys.

Думаю, вам понадобится специальный код в вашей реализации ISERializable, и я думаю, что это вполне законно.

У меня была бы дополнительная нестатическая переменная списка членов, называемая чем-то вроде «myDictionaryAdditions», когда я добавляю к статическому словарю, который я бы добавил в этот список. Предположительно, это будет правильно переведено на сервер. Теперь вам просто нужен код в де-сериализаторе для переноса не-дуплексов в статический словарь.

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(); 
    } 
} 
Смежные вопросы