6

ネストされたクラスを持つオブジェクトをシリアル化しようとしています。ネストされたクラスに[NonSerialized]属性のタグを付けましたが、エラーが発生します。

属性'NonSerialized'は、この宣言タイプでは無効です。'field'宣言でのみ有効です。

ネストされたクラスをシリアル化から除外するにはどうすればよいですか?

私がやろうとしていることを示すかもしれないいくつかのコードを含めました。助けてくれてありがとう。

[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);
}
4

3 に答える 3

11

このエラーは、知っておく必要のあるすべてのことを示しています。NonSerializedはフィールドにのみ適用できますが、自動プロパティではありますが、プロパティに適用しようとしています。

あなたが持っている唯一の本当のオプションは、このStackOverflowの質問に記載されているように、そのフィールドにautoプロパティを使用しないことです。

于 2011-03-29T15:18:28.037 に答える
10

プロパティのXmlIgnore属性も考慮してください。

http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlattributes.xmlignore.aspx

IIRC、プロパティはバイナリシリアル化では自動的に無視されます。

于 2011-05-26T14:09:17.153 に答える
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属性がフィールドでは有効であるがプロパティでは有効ではないため、自動実装されたプロパティと組み合わせて使用​​できないことです。

于 2011-03-29T15:21:08.620 に答える