Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#属性XmlIgnore和XamlWriter类-XmlIgnore不工作_C#_.net 4.0_Xamlreader_Xmlignore - Fatal编程技术网

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

C#属性XmlIgnore和XamlWriter类-XmlIgnore不工作,c#,.net-4.0,xamlreader,xmlignore,C#,.net 4.0,Xamlreader,Xmlignore,我有一个类,包含一个属性Brush MyBrush,标记为[XmlIgnore]。但是,它在流中序列化,在尝试通过XamlReader读取时会造成问题 我做了一些测试,例如,当将属性的可见性更改为“内部”时,它将消失在流中。不幸的是,在我的特定场景中,我无法做到这一点 有人有同样的问题吗 你有办法解决这个问题吗 备注:据我所知是C#4.0 这是我的单元测试中的一个方法,我在这里测试XamlSerialization: // buffer to a StringBuilde

我有一个类,包含一个属性
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
    。在上面的代码中,此单元测试失败,因为
    画笔
    对象(不可序列化)是值。当我移除Setter(如下所示)时,单元测试通过

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

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

    约翰的评论是正确的。还有(同样)其他属性。我在这里发现了这篇优秀的文章:

    我以前甚至遇到过属性
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]

    ,但将其误解为设计时属性。

    是否使用XmlSerializer进行序列化?您需要提供更多信息(如源代码)。目前的问题是不可复制的:
    [XmlIgnore]
    属性在我每次使用它时都能正常工作。XamlWriter不是XML序列化程序。我不希望[XmlIgnore]起作用。谢谢John,我重新检查并最终找到了[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]