Ho una classe, contenente una proprietà Brush MyBrush
contrassegnata come [XmlIgnore]
. Tuttavia viene serializzato nel flusso causando problemi durante il tentativo di leggere tramite XamlReader
.Attributo C# XmlIgnore e classe XamlWriter - XmlIgnore non funziona
Ho eseguito alcuni test, ad es. quando si modifica la visibilità della proprietà (all'interno) è andata nello stream. Purtroppo non posso farlo nel mio particolare scenario.
- Qualcuno ha lo stesso problema e?
- Vedete un modo per aggirare questo problema?
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 la proprietà Brush
. Nel codice sopra questo Test unità non riesce perché un valore Brush
(non serializzabile) è il valore. Quando rimuovo l'incastonatore (come sotto), passa il test unitario.
Utilizzando lo XmlWriter
(praticamente lo stesso test di cui sopra) funziona. Nel StringBuffer sb
posso vedere che Property Brush
è serializzato quando l'incastonatore è lì e non quando viene rimosso (molto probabilmente un altro controllo che ignora la proprietà a causa di nessun setter). Altre proprietà con [XmlIgnore]
vengono ignorate come previsto.
[XmlIgnore]
public Brush MyBrush
{
get { ..... }
// removed because of problem with Serialization
// set { ... }
}
Serializzate con XmlSerializer? – gsharp
È necessario fornire ulteriori informazioni (come il codice sorgente). Il problema così com'è non è riproducibile: l'attributo '[XmlIgnore]' funziona perfettamente per me ogni volta che l'ho usato. –
Ho fornito alcuni dettagli –