我有一个班级,包含财产 Brush MyBrush 标记为 [XmlIgnore]. 。然而,它在流中被序列化,在尝试通过 XamlReader.

我做了一些测试,例如,在更改属性的可见性时(内部)它在流中消失了。不幸的是,在我的特定情况下我无法做到这一点。

  1. 有人有同样的问题吗?
  2. 您看到有什么方法可以解决这个问题吗?

备注: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)] 以前,但将其误解为设计时间属性。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top