Hor*_*ter 7 c# .net-4.0 xamlreader xmlignore
我有一个类,包含Brush MyBrush标记为的属性[XmlIgnore].然而,它在流中被序列化,在尝试读取时会导致麻烦XamlReader.
我做了一些测试,例如当改变Property的可见性(到内部)时,它在流中消失了.不幸的是,我不能在我的特定场景中这样做.
备注:据我所知,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");
Run Code Online (Sandbox Code Playgroud)
在我的一个课程中,我使用了该属性Brush.在上面的代码中,单元测试失败,因为Brush对象(不可序列化)是值.当我移除Setter(如下所示)时,单元测试通过.
使用XmlWriter(基本上与上面相同的测试)它是有效的.在StringBuffer sb我可以看到,Property Brush当Setter在那里时是序列化的而不是在被删除时(很可能是因为没有setter而忽略了Property的另一个检查).其他属性[XmlIgnore]将按预期忽略.
[XmlIgnore]
public Brush MyBrush
{
get { ..... }
// removed because of problem with Serialization
// set { ... }
}
Run Code Online (Sandbox Code Playgroud)
Hor*_*ter 14
约翰的评论是正确的.还有(再次)其他属性.我在这里找到了这篇优秀的文章:http://blogs.msdn.com/b/mikehillberg/archive/2006/09/16/xamlwriter.aspx
我之前甚至遇到过这个属性[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)],但是把它误解为设计时属性.
| 归档时间: |
|
| 查看次数: |
4543 次 |
| 最近记录: |