Bra*_*rad 6 .net c# serialization serializable
我试图序列化具有嵌套类的对象.我用[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);
}
Run Code Online (Sandbox Code Playgroud)
Doc*_*Max 10
该错误告诉您需要知道的所有内容:NonSerialized只能应用于字段,但您尝试将其应用于属性,尽管是自动属性.
您唯一真正的选择是不对该字段使用auto属性,如StackOverflow问题中所述.
小智 9
还要考虑属性上的XmlIgnore属性:
http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlattributes.xmlignore.aspx
IIRC,二进制序列化会自动忽略属性.
尝试明确使用可以标记为[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; }
}
}
Run Code Online (Sandbox Code Playgroud)
问题是该NonSerialized属性对字段有效,但对属性无效,因此您不能将其与自动实现的属性结合使用.