在寫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#基本數據類型