I have a class, containing a property Brush MyBrush
marked as [XmlIgnore]
. Nevertheless it is serialized in the stream causing trouble when trying to read via XamlReader
.
I did some tests, e.g. when changing the visibility of the Property (to internal) it is gone in the stream. Unfortunately I cannot do this in my particular scenario.
- Did anybody have the same issue and?
- Do you see any way to work around this?
Remark: C# 4.0 as far I can tell
This is a method from my Unit Test where I do test the 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 one of my classes I use the Property Brush
. In the above code this Unit Tests fails because a Brush
object (not serializable) is the value. When I remove the Setter (as below), the Unit Test passes.
Using the XmlWriter
(basically same test as above) it works. In the StringBuffer sb
I can see that Property Brush
is serialized when the Setter is there and not when removed (most likely another check ignoring the Property because of no setter). Other Properties with [XmlIgnore]
are ignored as intended.
[XmlIgnore]
public Brush MyBrush
{
get { ..... }
// removed because of problem with Serialization
// set { ... }
}
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…