我正在尝试序列化具有嵌套类的对象。我已使用[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);
}
答案 0 :(得分:10)
错误告诉您需要知道的一切:NonSerialized只能应用于字段,但您尝试将其应用于属性,尽管是自动属性。
您唯一真正的选择是不对该字段使用自动属性,如StackOverflow question中所述。
答案 1 :(得分:8)
还要考虑属性上的XmlIgnore属性:
http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlattributes.xmlignore.aspx
IIRC,二进制序列化会自动忽略属性。
答案 2 :(得分:7)
尝试明确使用您可以标记为[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
属性对字段有效,但对属性无效,因此不能将其与自动实现的属性结合使用。