专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > J#

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

发布时间:2011-06-24 19:01:32 文章来源:www.iduyao.cn 采编人员:星星草
关于Color 的Xml序列化


public Color LeftColor{
  get;
  set;
}

这样序列化后, LeftColor 在xml文件中为 null,
网上找了一下,说Color直接序列化是不行的,需要转换成 String 或者 int ,但我不清楚如果在序列化的过程中转换,
下面链接谈了一些,但没具体谈到什么, 是不是要实现XmlSerializable 接口,http://www.cnblogs.com/surfsky/archive/2009/02/19/673620.html




------解决方案--------------------
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();
    }
}
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: