大家:
我看到了一种避免使用某些不支持序列化的类的方法。但我不知道使用这种方法的原因。所以我在这里提出了这个问题。
所以前面的代码如下所示
[Serializable]
Class OutterClass
{
public UsingClass UsingClassMember
{
get;
set;
}
}
所以在这里,如果我想序列化OutterClass,就会出现异常,因为UsingClass不支持序列化。显然,如果我想序列化OutterClass,OutterClass中的所有成员都应该支持序列化。
但是如果我修改代码如下。序列化操作可以成功完成。
[Serializable]
Class OutterClass
{
[NonSerialized]
private UsingClass m_UsingClassMember;
public UsingClass UsingClassMember
{
get { return m_UsingClassMember; };
set { m_UsingClassMember = value };
}
}
我不知道这个修改的原因。似乎属性 UsingClassMember 的序列化不需要序列化类 UsingClass 本身。谁能给我一个解释?
谢谢!
最佳答案
关于如何防止 C# 自动属性序列化,您有很好的示例。
Attribute 'NonSerialized' is not valid on this declaration type. It is only valid on 'field' declarations.
所以你不能在 C# auto 属性上设置“NonSerialized”,但是如果像你的第二个例子那样带有 baking up 字段的属性你可以像你一样设置它。那么 property 和 field 都不会被序列化。
在第二种情况下,编译器将忽略该属性,因为下划线字段是非序列化的,您不会像第一种情况那样得到异常。
如果你想序列化,那么你必须在 UsingClass
上设置 Serializable
属性,但如果你不需要序列化,你可以使用第二种方法或使用 [XmlIgnoreAttribute]
在您的汽车属性上
关于c# - 避免使用不支持序列化的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17713655/