2013-06-20 5 views
0

У меня есть следующий объект, содержащий статическую переменную-член.Сериализуйте объект вместе со статическими переменными-членами в XML

Что я хотел бы сделать, это сериализовать этот объект и сохранить его в XML. К сожалению, приведенный ниже код, похоже, не выполняет эту работу.

Я хотел бы получить любую помощь в получении этой работы, пожалуйста.

[Serializable] 
public class Numbers 
{ 
    public int no; 
    public static int no1; 
    public SubNumbers SubNumber; 
} 

[Serializable] 
public class SubNumbers 
{ 
    public int no; 
    public static int no2; 
} 

[TestMethod] 
public void Serialize_Object_with_Static_Property_test() 
{ 
    Numbers a = new Numbers(); 
    a.no = 12; 
    Numbers.no1 = 345243; 
    SubNumbers s = new SubNumbers(); 
    s.no = 459542; 
    SubNumbers.no2 = 9999999; 
    a.SubNumber = s; 
    String filename = @"a1.txt"; 
    FileStream fs = new FileStream(filename, FileMode.Open); 
    XmlSerializer x = new XmlSerializer(typeof(Numbers)); 
    x.Serialize(fs, a); 
    fs.Close(); 
} 
+0

Какая часть работы не делает? Я подозреваю, что вы только получаете членов экземпляра, правильно? Как в _not_ статический член. – DonBoitnott

+3

Я не знаю, есть ли способ заставить XmlSerializer смотреть на статические члены (на самом деле это не имеет смысла), но вы можете добавить свойство оболочки экземпляра? – Blorgbeard

+1

Как и http://stackoverflow.com/questions/1293496/serialize-a-static-class, и Джон Скит объясняет, почему. – Lloyd

ответ

4

С сериализации, мы можем сериализовать только те свойства, которые:

  • Public
  • Не статический
  • Не только для чтения

В этом случае, если вы хотите сериализуйте «no1», вы должны обернуть его, как это:

[Serializable] 
public class Numbers 
{ 
    public int no; 
    public static int no1; 
    public SubNumbers SubNumber; 

    public int no1_Serialize {get {return no1;} set {no1 = value;} } 
}