NonSerialized属性创建错误

时间:2011-03-29 15:15:06

标签: c# .net 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);
}

3 个答案:

答案 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属性对字段有效,但对属性无效,因此不能将其与自动实现的属性结合使用。