Frage

Ich habe eine Klasse, die eine Eigenschaft enthält Brush MyBrush markiert als [XmlIgnore]. Trotzdem wird es im Stream serialisiert, was beim Versuch durch das Versuch durch das Versuch durch Lesen serialisiert wird XamlReader.

Ich habe einige Tests durchgeführt, z. B. bei der Änderung der Sichtbarkeit der Eigenschaft (auf intern) ist sie im Strom weg. Leider kann ich das in meinem speziellen Szenario nicht tun.

  1. Hatte jemand das gleiche Problem und?
  2. Sehen Sie eine Möglichkeit, dies zu umgehen?

Bemerkung: C# 4.0, soweit ich das sagen kann

Dies ist eine Methode aus meinem Unit -Test, bei dem ich das teste 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 einer meiner Klassen benutze ich die Eigenschaft Brush. Im obigen Code schlägt diese Unit -Tests fehl, weil a Brush Objekt (nicht serialisierbar) ist der Wert. Wenn ich den Setter (wie unten) entferne, wird der Unit -Test geleitet.

Verwendung der XmlWriter (Grundsätzlich der gleiche Test wie oben) Es funktioniert. In dem StringBuffer sb Ich kann sehen, dass Property Brush wird serialisiert, wenn der Setter vorhanden ist, und nicht beim Entfernen (höchstwahrscheinlich eine andere Prüfung, die die Eigenschaft aufgrund eines Setters ignoriert). Andere Eigenschaften mit [XmlIgnore] werden wie beabsichtigt ignoriert.

    [XmlIgnore]
    public Brush MyBrush
    {
        get { ..... }
        // removed because of problem with Serialization
        // set { ... }
    }
War es hilfreich?

Lösung

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

Ich bin sogar auf das Attribut gestoßen [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] vorher, aber interpretierte es falsch als Designzeitattribut.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top