NonSerialized 属性创建错误
Posted
技术标签:
【中文标题】NonSerialized 属性创建错误【英文标题】:NonSerialized attribute creating error 【发布时间】:2011-07-25 09:26:35 【问题描述】:我正在尝试序列化具有嵌套类的对象。我已经用 [NonSerialized] 属性标记了嵌套类,但我收到一个错误:
属性“NonSerialized”在此声明类型上无效。它仅对“字段”声明有效。
如何从序列化中省略嵌套类?
我已经包含了一些代码,可以显示我正在尝试做的事情。 感谢您的帮助。
[Serializable]
public class A_Class
public String text get; set;
public int number get; set;
[Serializable]
public class B_Class
[NonSerialized]
public A_Class A get; set;
public int ID get; set;
public byte[] ObjectToByteArray(object _Object)
using (var stream = new MemoryStream())
var formatter = new BinaryFormatter();
formatter.Serialize(stream, _Object);
return stream.ToArray();
void Main()
Class_B obj = new Class_B()
byte[] data = ObjectToByteArray(obj);
【问题讨论】:
该错误完全描述了问题 - 您不能将此属性应用于除字段之外的任何内容(您正在尝试将其应用于属性)。 【参考方案1】:该错误告诉您您需要知道的一切:NonSerialized 只能应用于字段,但您正在尝试将其应用于属性,尽管是自动属性。
您唯一真正的选择是不使用该字段的自动属性,如 *** question 中所述。
【讨论】:
【参考方案2】:还要考虑属性上的 XmlIgnore 属性:
http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlattributes.xmlignore.aspx
IIRC,二进制序列化会自动忽略属性。
【讨论】:
【参考方案3】:尝试显式使用您可以标记为 [NonSerialized] 的支持字段
[Serializable]
public class B_Class
[NonSerialized]
private A_Class a; // backing field for your property, which can have the NonSerialized attribute.
public int ID get; set;
public A_Class A // property, which now doesn't need the NonSerialized attribute.
get return a;
set a= value;
问题是NonSerialized
属性对字段有效,但对属性无效,因此您不能将它与自动实现的属性结合使用。
【讨论】:
以上是关于NonSerialized 属性创建错误的主要内容,如果未能解决你的问题,请参考以下文章