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.
- Hat jemand das gleiche Problem und?
- 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 { ... }
}
Serialisieren Sie mit XmlSerializer? – gsharp
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. –
Ich habe einige Details zur Verfügung gestellt –