C#克隆代碼,無需添加[Serializable]

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章