Frage Nicht serialisiertes Attribut, das Fehler erzeugt


Ich versuche ein Objekt mit einer verschachtelten Klasse zu serialisieren. Ich habe die geschachtelte Klasse mit dem [NonSerialized] -Attribut markiert, aber ich erhalte einen Fehler:

Das Attribut 'NonSerialized' ist für diesen Deklarationstyp nicht gültig. Es ist nur gültig für Feld-Deklarationen.

Wie kann ich die geschachtelte Klasse aus der Serialisierung auslassen?

Ich habe Code eingefügt, der zeigen könnte, was ich versuche zu tun. Danke für jede Hilfe.

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

6
2018-03-29 15:15


Ursprung


Antworten:


Der Fehler sagt Ihnen alles, was Sie wissen müssen: NonSerialized kann nur auf Felder angewendet werden, aber Sie versuchen, es auf eine Eigenschaft anzuwenden, obwohl eine Auto-Eigenschaft.

Die einzige wirkliche Option, die Sie haben, besteht darin, keine Auto-Eigenschaft für dieses Feld zu verwenden, wie in diesem Artikel erwähnt StackOverflow-Frage.


10
2018-03-29 15:18



Versuchen Sie explizit, ein Backing-Feld zu verwenden, das Sie kann als [Nicht serialisiert] markieren

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

Das Problem ist, dass die NonSerialized Das Attribut ist für Felder, aber nicht für Eigenschaften gültig, daher können Sie es nicht in Kombination mit automatisch implementierten Eigenschaften verwenden.


7
2018-03-29 15:21



Beachten Sie auch das XmlIgnore-Attribut für die Eigenschaft:

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

IIRC, Eigenschaften werden automatisch für die binäre Serialisierung ignoriert.


7
2018-05-26 14:09