【问题标题】:C# Attribute XmlIgnore and XamlWriter class - XmlIgnore not workingC# Attribute XmlIgnore 和 XamlWriter 类 - XmlIgnore 不起作用
【发布时间】:2011-01-01 20:09:58
【问题描述】:

我有一个类,包含一个属性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 对象(不可序列化)。当我删除 Setter(如下所示)时,单元测试通过。

使用XmlWriter(与上面的测试基本相同)它可以工作。在StringBuffer sb 中,我可以看到Property Brush 在Setter 存在时被序列化,而不是在被移除时被序列化(很可能是另一个检查忽略了属性,因为没有setter)。 [XmlIgnore] 的其他属性将按预期忽略。

    [XmlIgnore]
    public Brush MyBrush
    {
        get { ..... }
        // removed because of problem with Serialization
        // set { ... }
    }

【问题讨论】:

  • 您是否使用 XmlSerializer 进行序列化?
  • 您需要提供更多信息(如源代码)。目前的问题是不可重现的:[XmlIgnore] 属性对我来说每次都很好用。
  • XamlWriter 不是 XML 序列化程序。我不希望 [XmlIgnore] 起作用。
  • 感谢John,我重新检查并最终找到了[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]

标签: c# .net-4.0 xamlreader xmlignore


【解决方案1】:

约翰的评论是正确的。还有(再次)其他属性。我在这里找到了这篇优秀的文章:http://blogs.msdn.com/b/mikehillberg/archive/2006/09/16/xamlwriter.aspx

之前我什至遇到过[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]这个属性 ,但将其误解为设计时属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-19
    • 2010-11-25
    • 2010-12-02
    • 1970-01-01
    相关资源
    最近更新 更多