我在.NET中使用二進制序列化來克隆對象。我必須使用<Serializable()>
屬性標記自己的任何類,以便序列化程序處理該類。然而,因爲這是一個功能,將用於任何對象,我想知道:可序列化屬性.NET
是否有可能序列化程序序列化對象,即使它沒有標記<Serializable()>
屬性?如果沒有,是否有辦法將該屬性「自動應用」到任何類中?
編輯。我主要關心的是我需要能夠克隆.NET Framework中已經存在的POCO對象。所有這些都已經可序列化了嗎?
我在.NET中使用二進制序列化來克隆對象。我必須使用<Serializable()>
屬性標記自己的任何類,以便序列化程序處理該類。然而,因爲這是一個功能,將用於任何對象,我想知道:可序列化屬性.NET
是否有可能序列化程序序列化對象,即使它沒有標記<Serializable()>
屬性?如果沒有,是否有辦法將該屬性「自動應用」到任何類中?
編輯。我主要關心的是我需要能夠克隆.NET Framework中已經存在的POCO對象。所有這些都已經可序列化了嗎?
不知道如何實現一個類,序列化它並不安全,這樣做可能會導致細微的對象。這就是爲什麼類設計者必須有意添加Serializable
屬性,讓運行時知道這是一個安全的操作。自動將該屬性添加到任何類可能是一個壞主意。
如果你真的需要序列化類,是不是Serializable
,您可以手動做到這一點:
如果失敗了,你應該看看除了序列化之外還保留狀態的其他方法。
您不能在運行時修改屬性。只在來源。
您可以使用反射遍歷任何類/實例的屬性。 但是你必須做一個自定義的序列化程序。
.NET框架本身通常會在所有類和結構中提供序列化支持,因此框架本身的類很可能適用於您的克隆。但是,如果您使用任何第三方庫,則可能會遇到麻煩,但不幸的是,這些庫通常沒有正確的序列化支持。
考慮使用typeof(yourType).IsSerializable ...