web-dev-qa-db-ja.com

本当にSerializableAttributeが必要ですか?

オブジェクトをシリアル化できるクラスをマークするためにそれが必要であることを理解していますが、フードロジックの背後で機能させるためにこれを厳密に必要としますか?必要なメソッドを使用してオブジェクトをシリアル化できます。一方、シリアライゼーションを防止したい場合は、この属性を持つことは意味があります。その場合、[NonSerialized()]は冗長になります。

構文と意味論を考えると、この属性の必要性は何ですか?

3
Shamim Hafiz

フードロジックの背後で機能するためにこれが厳密に必要ですか?

いいえ。ほとんどのシリアル化ライブラリ(I.E. Newtonsoft.JSON、System.Xml.Serialization)は[Serializable]属性を必要とせず、代わりにパブリックフィールドとプロパティはシリアル化する必要があり、プライベートのものはオプトアウトするためのいくつかのメソッドを持たないものとする。

BinaryFormatterに関しては、プライベートフィールドを含むすべてをデフォルトでシリアル化します。これは、クラスのシリアル化が意図されていなかった場合に機密データまたは意図しないデータが公開される可能性があるため、少し潜在的に危険です。

参照 https://stackoverflow.com/questions/2982376/why-is-serializable-attribute-required-for-an-object-to-be-serialized

3
Eric Damtoft