gpt4 book ai didi

C# 属性 XmlIgnore 和 XamlWriter 类 - XmlIgnore 不工作

转载 作者:太空狗 更新时间:2023-10-29 20:01:58 27 4
gpt4 key购买 nike

我有一个类,包含标记为 [XmlIgnore] 的属性 Brush MyBrush。然而,它在流中序列化,导致在尝试通过 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");

在我的一个类(class)中,我使用属性 Brush。在上面的代码中,此单元测试失败,因为 Brush 对象(不可序列化)是值。当我删除 Setter(如下所示)时,单元测试通过。

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

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

最佳答案

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

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

关于C# 属性 XmlIgnore 和 XamlWriter 类 - XmlIgnore 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4575555/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com