如何忽略 [XMLIgnore] 属性

Posted

技术标签:

【中文标题】如何忽略 [XMLIgnore] 属性【英文标题】:How do I ignore an [XMLIgnore] Attribute 【发布时间】:2010-11-25 21:45:58 【问题描述】:

我正在尝试将从第 3 方 .NET Lib 获得的一些对象序列化为 XML 文件。

当我Go To Definition为对象时,该对象的一些Properties被标记为[XMLIgnore]

有什么方法可以告诉我的System.Xml.Serialization.XmlSerializer 忽略某些属性具有该属性并且应该序列化对象中的所有内容的事实。

我可能会获得源代码并在没有 XMLIgnore 属性的情况下重新编译它,但如果 XmlSerializer 有一些不错的覆盖属性就好了,比如

XmlSerializer xmls = new XmlSerializer(
   typeof(MyObject),
   Settings.DoNotApplyXMLAttributeRules
);

提前致谢


编辑

已按照建议尝试了 XmlAttributeOverrides,但没有太多乐趣。 这是对象定义(来自照片的 FlickrAPI)

[Serializable]
public class Photo

    //Some code omitted
    [XmlIgnore]
    public string LargeUrl  get; 


这是我编写的序列化程序代码...仍然无法正常工作...

XmlWriter xtw = XmlWriter.Create( Server.MapPath("~/App_Data/Data.xml") );

XmlAttributes photoAttributes = new XmlAttributes();
photoAttributes.XmlIgnore = false;

XmlAttributeOverrides photoOverrides = new XmlAttributeOverrides();
photoOverrides.Add(typeof(Photo), "LargeUrl", photoAttributes);

XmlSerializer xmlphoto = new XmlSerializer(typeof(Photo), photoOverrides);

【问题讨论】:

【参考方案1】:

使用:

XmlAttributeOverrides

http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlattributes.xmlignore.aspx

编辑:(在问题编辑之后)

该属性必须是公共的,并且有一个要序列化的 getter 和 setter。

http://msdn.microsoft.com/en-us/library/182eeyhh%28VS.85%29.aspx

((见第一注))

【讨论】:

已经尝试过了,但没有任何乐趣。任何其他建议将不胜感激。我已将代码添加到原始问题中,以防我做傻事。 LargeUrl 没有设置器,所以即使没有 XmlIgnore 属性,它也不会被序列化。 啊对。我通过创建一个代理类来存储值然后单独序列化它来解决它。

以上是关于如何忽略 [XMLIgnore] 属性的主要内容,如果未能解决你的问题,请参考以下文章

在 .NET JSON 序列化期间忽略字段;类似于 [XmlIgnore]?

svn:ignore 设置忽略文件

类属性的几个特性的含义

XmlIgnore的解释和使用

如何杀死“未知属性'扁平'被忽略”警告?

idea中怎么忽略(ignore)掉 .idea等文件