C#属性XMlignore和XamlWriter类-XMlignore无法正常工作
-
14-10-2019 - |
题
我有一个班级,包含财产 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");
在我的一个课程中,我使用该属性 Brush
. 。在上面的代码中,该单元测试失败,因为 Brush
对象(不可序列化)是值。当我删除六个六重点时(如下),单位测试通过。
使用 XmlWriter
(基本上与上述测试相同)它有效。在里面 StringBuffer sb
我理解了 Property Brush
当设置器在那里而不是删除时,被序列化(很可能是由于没有设置器而忽略属性的另一个检查)。其他属性 [XmlIgnore]
按预期被忽略。
[XmlIgnore]
public Brush MyBrush
{
get { ..... }
// removed because of problem with Serialization
// set { ... }
}
解决方案
约翰的评论是正确的。还有其他属性。我在这里找到了这篇出色的文章: http://blogs.msdn.com/b/mikehillberg/archive/2006/09/16/xamlwriter.aspx
我什至遇到了属性 [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
以前,但将其误解为设计时间属性。
不隶属于 StackOverflow