C # Attributo XmlIgnore e XamlWriter classe - XmlIgnore non funziona
-
14-10-2019 - |
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.
- Qualcuno ha lo stesso problema e?
- 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 { ... }
}
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.