I am trying to serialize an object that has a nested class. I have tagged the nested class with the [NonSerialized] attribute but I receive an error:
Attribute 'NonSerialized' is not valid on this declaration type. It is only valid on 'field' declarations.
How do I omit the nested class from serialization?
I have included some code that may show what I am trying to do. Thanks for any help.
[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_开发者_Go百科B()
byte[] data = ObjectToByteArray(obj);
}
The error tells you everything you need to know: NonSerialized can only be applied to fields, but you are trying to apply it to a property, albeit an auto-property.
The only real option you have is to not use an auto property for that field as noted in this StackOverflow question.
Also consider XmlIgnore attribute on the property:
http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlattributes.xmlignore.aspx
IIRC, properties are ignored automatically for binary serialization.
Try explicitly using a backing field which you can mark as [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; }
}
}
The problem is that the NonSerialized
attribute is valid on fields but not properties, therefore you can't use it in combination with auto-implemented properties.
精彩评论