public Color LeftColor{
get;
set;
}
这样序列化后, LeftColor 在xml文件中为 null,
网上找了一下,说Color直接序列化是不行的,需要转换成 String 或者 int ,但我不清楚如果在序列化的过程中转换,
下面链接谈了一些,但没具体谈到什么, 是不是要实现XmlSerializable 接口,http://www.cnblogs.com/surfsky/archive/2009/02/19/673620
------解决方案--------------------------------------------------------
int icolor = ColorTranslator.ToWin32(acolor).ToString();
Color color = ColorTranslator.FromWin32(icolor);
------解决方案--------------------------------------------------------
1:如果类没有添加可序列化的属性则添加上:[Serializable]
2:如果类本身不能被正确的序列化,则继承ISerializable接口,自己来定义类的序列化,比如:
- C# code
[Serializable]public class ClassA : ISerializable{ private string str_; private object m_aa; private int num_; private DateTime overdueTime; public ClassA() { } protected ClassA(SerializationInfo info, StreamingContext context) { this.str_ = info.GetString("str"); this.num_ = info.GetInt32("num_"); } public ClassA(string myStr, int myNum) { str_ = myStr; num_ = myNum; this.overdueTime = DateTime.Now; } public string Str { get { return str_; } set { str_ = value; } } public int Num { get { return num_; } set { this.num_ = value; } } public DateTime OverdueTime { get { return overdueTime; } set { overdueTime = value; } } public object AA { get { return this.m_aa; } set { this.m_aa = value; } } public void GetObjectData(SerializationInfo info, StreamingContext context) { info.AddValue("str", str_); info.AddValue("num_", num_); }}public class Program1{ static void Main(string[] args) { ClassA ca = new ClassA("Hello ", 10); XmlSerializer xSerial = new XmlSerializer(typeof(ClassA)); //StreamReader reader = new StreamReader(@"D:\temp\po.xml "); //object obj = xSerial.Deserialize(reader); //StreamWriter write = new StreamWriter(@"D:\temp\po.xml "); //xSerial.Serialize(write, ca);//为什么串行化不了值 //or use BinaryFormatter IFormatter formatter = new BinaryFormatter(); Stream stream = new FileStream(@"D:\temp\po.xml", FileMode.Open, FileAccess.Read, FileShare.None); //formatter.Serialize(stream, ca); object obj = formatter.Deserialize(stream); stream.Close(); }}