2011-01-01 13 views
7

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.

  1. Qualcuno ha lo stesso problema e?
  2. 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 { ... } 
    } 
+3

Serializzate con XmlSerializer? – gsharp

+0

È 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. –

+0

Ho fornito alcuni dettagli –

risposta

14

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

Ho anche imbattuto l'attributo [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] prima , ma interpretato male come un attributo di fase di progettazione.

+0

+1 Salvato il mio giorno :) –

Problemi correlati