正在序列化SecurityTransparent程序集中的不可变结构
本文关键字:集中 不可变 结构 程序集 程序 序列化 SecurityTransparent | 更新日期: 2023-09-27 18:22:48
我正在.NET 4上启动一个新项目。我将要创建的所有库都将应用SecurityTransparentAttribute
。
现在,我在其中一个程序集中有一个不可变的结构,需要序列化。作为一个不可变对象,不会有任何属性的setter(就像System.DateTime
一样)。
如果我只是将结构标记为[Serializable]
,则不会序列化任何内容,因为属性是只读的。通常的处理方法是实现ISerializable
接口,并在GetObjectData
和特殊构造函数中处理它。
但在这种情况下,我的程序集将是安全透明的,而ISerializable.GetObjectData
就是SecurityCritical
,所以我不能用这种方式。
那么,我有什么选择呢?我真的很想拥有SecurityTransparent
的一切,因为我真的不需要任何关键的东西。除了这个。
感谢
如果使用BinaryFormatter
,它会序列化结构的字段,而不是其属性,即使字段是readonly
,它也能工作。因此,如果通过简单地序列化结构的字段来序列化结构是合适的,那么您就已经做好了准备。
我的第一个想法是,知道如何序列化自己,在结构中有太多的行为吗?
您可以为它创建一个类型转换器