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

关于Color 的Xml序列化解决办法

热度:7835   发布时间: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接口,自己来定义类的序列化,比如:

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