Domanda

Ho una classe, contenente un Brush MyBrush proprietà contrassegnata come [XmlIgnore]. Tuttavia viene serializzato nel flusso causare problemi quando si cerca di leggere attraverso XamlReader.

Ho fatto alcuni test, per esempio quando si cambia la visibilità della proprietà (per interno) è andato nel flusso. Purtroppo non posso fare questo nel mio scenario particolare.

  1. Qualcuno ha lo stesso problema e?
  2. Non si vede alcun modo per ovviare a questo?

Nota: C # 4.0, per quanto posso dire

Questo è un metodo dalla mia prova Unità dove faccio testare la XamlSerialization:

            // buffer to a StringBuilder
            StringBuilder sb = new StringBuilder();
            XmlWriter writer = XmlWriter.Create(sb, settings);
            XamlDesignerSerializationManager manager = new XamlDesignerSerializationManager(writer) {XamlWriterMode = XamlWriterMode.Expression};

            XamlWriter.Save(testObject, manager);
            xml = sb.ToString();
            Assert.IsTrue(!String.IsNullOrEmpty(xml) && !String.IsNullOrEmpty(xml), "Xaml Serialization failed for " + testObject.GetType() + " no xml string available");

            xml = sb.ToString();
            MemoryStream ms = xml.StringToStream();
            object root = XamlReader.Load(ms);
            Assert.IsTrue(root != null, "After reading from MemoryStream no result for Xaml Serialization");

In una delle mie classi ho utilizzare il Brush proprietà. Nel codice sopra questo test unitari fallisce perché un oggetto Brush (non serializzabile) è il valore. Quando rimuovo il Setter (come sotto), il test di unità passa.

Uso della XmlWriter (sostanzialmente stesso test come sopra) funziona. Nel StringBuffer sb posso vedere che Property Brush viene serializzato quando il Setter è lì e non quando viene rimosso (molto probabilmente un altro controllo ignorando la proprietà a causa di nessun setter). Altre proprietà con [XmlIgnore] vengono ignorati come previsto.

    [XmlIgnore]
    public Brush MyBrush
    {
        get { ..... }
        // removed because of problem with Serialization
        // set { ... }
    }
È stato utile?

Soluzione

Commento Giovanni è corretto. Ci sono (di nuovo) altri attributi. Ho trovato questo eccellente articolo qui: http: // blog. msdn.com/b/mikehillberg/archive/2006/09/16/xamlwriter.aspx

Ho anche venuto in tutto il [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] attributo prima , Ma male interpretato come un attributo di fase di progettazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top