一次偶然的机会,要对很多对象进行clone,但是如果为每个对象的类都去实现ICloneable接口,感觉有一些太麻烦了,就想有没有一个很好的方法可以对一个对象进行clone,而不需要在源对象的类上引入新的方法呢?当然,想到了两个简单可行的方法:
1. 利用.net中的反射进行;
2. 使用XmlSerializer进行;
考虑到我需要clone的对象都是可以序列化的,所以就选择用XmlSerializer进行对象clone,方法其实很简单,就是先把源对象序列化,然后再从序列化的string中反序列化就可以生成一个新的对象了。具体代码如下:
- public static object CloneObject(object source)
- {
- if (source != null)
- {
- XmlSerializer xmlSerializer = new XmlSerializer(source.GetType());
- StringBuilder stringBuilder = new StringBuilder();
- using (XmlWriter xmlWriter = XmlWriter.Create(stringBuilder))
- {
- xmlSerializer.Serialize(xmlWriter, source);
- System.Diagnostics.Debug.WriteLine(stringBuilder.ToString());
- }
- using (StringReader stringReader=new StringReader(stringBuilder.ToString()))
- {
- return xmlSerializer.Deserialize(stringReader);
- }
- }
- return null;
- }