如何忽略 [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] 属性的主要内容,如果未能解决你的问题,请参考以下文章