标签: xmlignore

C#属性XmlIgnore和XamlWriter类 - XmlIgnore无法正常工作

我有一个类,包含Brush MyBrush标记为的属性[XmlIgnore].然而,它在流中被序列化,在尝试读取时会导致麻烦XamlReader.

我做了一些测试,例如当改变Property的可见性(到内部)时,它在流中消失了.不幸的是,我不能在我的特定场景中这样做.

  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 …
Run Code Online (Sandbox Code Playgroud)

c# .net-4.0 xamlreader xmlignore

7
推荐指数
1
解决办法
4543
查看次数

XmlIgnoreAttribute,仅在序列化期间使用,而不是在反序列化期间使用?

我是否正确理解.NET XmlIgnoreAttribute,它说:

指示XmlSerializer的Serialize方法不要序列化公共字段或公共读/写属性值.

那:

  • 如果存在于XML文件中,该属性将被反序列化?
  • 该属性不会被序列化为新的XML文件?

我问的原因是我用一个带有更多选项的新属性替换了文件中的属性.旧属性是一个简单的布尔属性,新属性是枚举.我已经更改了旧属性,以便将新属性的值转换为布尔值,根据旧属性在添加新属性之前的含义,get和set都已实现.

这允许我通过读取设置新属性的旧属性来静默升级新文件,并在序列化时添加新属性.

但是,我想从新的xml文件中删除旧属性,所以我想知道如果我用它标记它会发生什么[XmlIgnore],旧的xml文件是否仍然正确地反序列化并从文件中读取该属性,或者它会被完全忽略?

如果没有,以下变化会做我想要的吗?

[XmlAttribute("is-list")]
[DefaultValue(false)]
public bool IsList
{
    get { return false; }
    set {
        if (value)
            ListHandling = ListHandling.All;
    }
}
Run Code Online (Sandbox Code Playgroud)

对于所有新对象,这将返回false,因为我已经指定了默认值,并且如果存在于旧文件中,并且设置为true,则会更改ListHandling属性,这将是重要的新属性.

编辑:经过测试,我已经确认这两种方法似乎都符合我的要求.我会留下这个问题,因为我仍然想知道上面提到的第一个行为是否只是一个实现细节,或者是否可以通过这种方式理解文档.

.net xml-serialization xmlignore

6
推荐指数
1
解决办法
6147
查看次数

在嵌套属性上使用XmlAttributeOverrides

我试图使用XmlAttributeOverrides来控制哪些类属性在序列化后显示在xml中。它适用于“根”类上的属性,但不适用于嵌套属性。这是一个简单的示例,以说明我要完成的工作。

我的班级层次结构如下:

public class Main
{
    public string Name { get; set; }
    public Location Address { get; set; }
}

public class Location
{
    public string StreetAddress { get; set; }
    public Contact ContactInfo{ get; set; }
}

public class Contact
{
    public string PhoneNumber { get; set; }
    public string EmailAddr { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

当我序列化Main()时,我得到如下信息:

<Main>
    <Name></Name>
    <Address>
        <StreetAddress></StreetAddress>
        <ContactInfo>
            <PhoneNumber></PhoneNumber>
            <EmailAddr></EmailAddr>
        </ContactInfo>
    </Address>
</Main>
Run Code Online (Sandbox Code Playgroud)

我所能做的就是通过使用以下命令来避免显示名称或地址:

XmlAttributeOverrides overrides = new XmlAttributeOverrides();
XmlAttributes attribs = new XmlAttributes(); …
Run Code Online (Sandbox Code Playgroud)

c# class xml-attribute xmlserializer xmlignore

2
推荐指数
2
解决办法
8371
查看次数