我有一个类,包含一个Brush MyBrush
标记为[XmlIgnore]
. 然而,它在流中被序列化,在尝试通过读取时造成麻烦XamlReader
。
我做了一些测试,例如当改变属性的可见性(到内部)时,它在流中消失了。不幸的是,在我的特定情况下,我无法做到这一点。
- 有没有人有同样的问题?
- 你有什么办法解决这个问题吗?
备注:据我所知,C# 4.0
这是我的单元测试中的一种方法,我在其中测试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");
在我的一门课程中,我使用了 Property Brush
。在上面的代码中,这个单元测试失败了,因为Brush
值是一个对象(不可序列化)。当我删除 Setter(如下所示)时,单元测试通过。
使用XmlWriter
(与上述基本相同的测试)它可以工作。在StringBuffer sb
我可以看到,Property Brush
当 Setter 存在而不是被移除时,它是序列化的(很可能是另一个检查忽略了属性,因为没有设置器)。其他属性[XmlIgnore]
按预期忽略。
[XmlIgnore]
public Brush MyBrush
{
get { ..... }
// removed because of problem with Serialization
// set { ... }
}