在SecurityTransparent程序集中序列化不可变结构

时间:2012-02-07 15:28:16

标签: c# serialization .net-4.0

我正在开始一个关于.NET 4的新项目。我将创建的所有库都将SecurityTransparentAttribute应用。

现在我在其中一个需要序列化的程序集中有一个不可变的结构。作为不可变对象,不会有任何属性的设置器(例如System.DateTime)。

如果我只是将结构标记为[Serializable],则不会将任何内容序列化,因为属性是只读的。解决这个问题的常用方法是实现ISerializable接口,并在GetObjectData和特殊构造函数中处理它。

但在这种情况下,我的程序集将是安全透明的,而ISerializable.GetObjectDataSecurityCritical,所以我不能这样做。

那么,我的选择是什么?我真的想拥有一切SecurityTransparent因为我不需要任何关键的东西。除此之外。

由于

2 个答案:

答案 0 :(得分:1)

如果您正在使用BinaryFormatter,则会对结构的字段进行序列化,而不是其属性,即使字段为readonly,它也能正常工作。因此,如果通过简单地序列化其字段来序列化您的结构是合适的,那么您已完全设置。

答案 1 :(得分:0)

我的第一个想法是,知道如何在结构中序列化自己过多的行为?

您可以沿着为其创建type converter的路线