2012-02-02 68 views
9

我正在经历很多代码和标记类,我现在想要使用Serialization属性来保存它们。我还没有编写二进制序列化/反分类引擎,所以猜想一旦完成,我会回答自己的问题! - 但我认为如果没有问题,我会尝试在这里得到更早的答复。我遇到了一些代码,其中包含一个属性,如:自动实现的属性和序列化

public string Id 
    { 
     get; 
     set; 
    } 

“Id”是否被序列化?我明白,在编译器的auto下创建一个类成员,但这是否正确序列化(因为类实例的所有数据成员写入存储)?感觉不会,因为你不能在属性上放置Serialized/NonSerialized属性。

在此先感谢。

+1

“这取决于”您使用的序列化。运行时序列化,XML序列化,数据合约序列化在这方面都是不同的。 – 2012-02-02 16:00:20

+0

你打算如何序列化你的课程? – 2012-02-02 16:01:02

+0

@John:我将要使用二进制序列化 – Jeb 2012-02-02 16:01:19

回答

8

您可以使用[field:NonSerialized]属性将事件的后备字段标记为不可序列化,但是看起来这不适用于自动属性。使用自动属性后台字段将被序列化,并且阻止该行为的唯一方法是将它们转换为常规属性,并用正常的[NonSerialized]注释显式后台字段。

2

正如@John在他的评论中指出的那样,BinaryFormatterSystem.Runtime.Serialization.Formatters.Binary)将序列化您的自动生成的支持字段。您可以通过实现ISerializable接口来使用自定义序列化,然后为您的类决定哪些值是序列化的。