在写C#程序是,有时需要对代码克隆,移除引用关系,但是网上搜索的要么实现ICloneable,要么使用序列化和反序列化,但是使用序列化的方法需要在要克隆的类添加[Serializable],现在对网上的序列化克隆方法稍微修改一下,使克隆类不需要添加[Serializable]标记实现克隆
public static T Clone<T>(T obj)
{
System.Xml.Serialization.XmlSerializer xmlSerializer = new System.Xml.Serialization.XmlSerializer(typeof(T));
System.IO.MemoryStream stream = new System.IO.MemoryStream();
xmlSerializer.Serialize(stream,obj);
//主要是把网络上的添加了转成字符串的过程
string temp = System.Text.Encoding.Default.GetString(stream.ToArray());
stream = new System.IO.MemoryStream(System.Text.Encoding.Default.GetBytes(temp));
System.Xml.XmlReaderSettings xmlReaderSettings = new System.Xml.XmlReaderSettings();
xmlReaderSettings.IgnoreComments = true;
System.Xml.XmlReader xmlReader = System.Xml.XmlReader.Create(stream, xmlReaderSettings);
if (xmlReader != null)
{
T t= (T)xmlSerializer.Deserialize(xmlReader);
return t;
}
return default(T);
}
如果在Unity中使用并不支持Unity中的GameObject等类,类及引用类中只能是C#基本数据类型