2011-01-01 3 views
7

Ich habe eine Klasse, die eine Eigenschaft Brush MyBrush als [XmlIgnore] markiert. Trotzdem ist es im Stream serialisiert und verursacht Probleme beim Lesen über XamlReader.C# Attribut XmlIgnore und XamlWriter Klasse - XmlIgnore funktioniert nicht

Ich habe einige Tests, z.B. Wenn Sie die Sichtbarkeit der Eigenschaft ändern (zu intern), ist sie im Stream verschwunden. Leider kann ich das in meinem speziellen Szenario nicht machen.

  1. Hat jemand das gleiche Problem und?
  2. Siehst du irgendeinen Weg um dies zu umgehen?

Bemerkung: C# 4.0, wie weit kann ich sagen

Dies ist eine Methode aus meiner Unit-Test, wo ich die XamlSerialization testen: Ich habe die Eigenschaft verwenden

  // 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 einer meiner Klassen Brush. Im obigen Code schlägt dieser Komponententest fehl, da ein Brush Objekt (nicht serialisierbar) der Wert ist. Wenn ich den Setter entferne (wie unten), wird der Komponententest bestanden.

Mit der XmlWriter (im Grunde gleichen Test wie oben) funktioniert es. In der StringBuffer sb kann ich sehen, dass Property Brush serialisiert wird, wenn der Setter vorhanden ist und nicht, wenn entfernt (am wahrscheinlichsten eine andere Überprüfung ignoriert die Eigenschaft, weil kein Setter). Andere Eigenschaften mit [XmlIgnore] werden wie beabsichtigt ignoriert.

[XmlIgnore] 
    public Brush MyBrush 
    { 
     get { ..... } 
     // removed because of problem with Serialization 
     // set { ... } 
    } 
+3

Serialisieren Sie mit XmlSerializer? – gsharp

+0

Sie müssen weitere Informationen bereitstellen (wie Quellcode). Das Problem, so wie es aussieht, ist nicht reproduzierbar: Das '[XmlIgnore]' - Attribut funktioniert für mich jedes Mal, wenn ich es jemals benutzt habe. –

+0

Ich habe einige Details zur Verfügung gestellt –

Antwort

14

Johns Kommentar ist korrekt. Es gibt (wieder) andere Attribute. Ich fand diesen ausgezeichneten Artikel hier: http://blogs.msdn.com/b/mikehillberg/archive/2006/09/16/xamlwriter.aspx

ich sogar über das Attribut kam [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] vor , aber es als Design-Zeit-Attribut falsch interpretiert.

+0

+1 rettete meinen Tag :) –

Verwandte Themen