当前位置: 代码迷 >> J# >> 关于Color 的Xml序列化解决思路
  详细解决方案

关于Color 的Xml序列化解决思路

热度:6024   发布时间:2013-02-25 00:00:00.0
关于Color 的Xml序列化


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();    }}
  相关解决方案