C# XmlIgnore不起作用

C# XmlIgnore不起作用,c#,xml,serialization,xml-serialization,xmlignore,C#,Xml,Serialization,Xml Serialization,Xmlignore,我有一个要序列化的对象,输出如下: <root> <Items> <Item> <Value> blabla </Value> </Item> </Items> 在某些情况下,我想忽略value的值,我有以下代码 var overrides = new XmlAttributeOverrides(); var attributes = new XmlAttri

我有一个要序列化的对象,输出如下:

 <root>
  <Items>
    <Item>   
      <Value> blabla </Value>
    </Item>  
  </Items>
在某些情况下,我想忽略value的值,我有以下代码

 var overrides = new XmlAttributeOverrides();
 var attributes = new XmlAttributes { XmlIgnore = true };
 attributes.XmlElements.Add(new XmlElementAttribute("Item"));                  
 overrides.Add(typeof(Item), "Value", attributes);               
 var serializer = new XmlSerializer(typeof(root), overrides);
但该值仍写入输出中


我做错了什么?

我认为XMLIgnore属性应该用于修饰用XmlSerializable属性修饰过的类的公共成员,这样会起作用。

如果总是忽略值,最好直接将属性指定给成员

[Serializable]
[XmlInclude(typeof(Item))]
public class Items
{
    [XmlIgnore]
    public string Value
}
如果有条件地忽略该值,我认为最好在序列化之前从根类中删除该元素

至于您的代码,我怀疑(我可能是错的,因为我还没有尝试过!)以下几点就足够了:

var overrides = new XmlAttributeOverrides();
var attributes = new XmlAttributes { XmlIgnore = true };
overrides.Add(typeof(Items), "Value", attributes);               
serializer =  new XmlSerializer(typeof(root), overrides);
更新:我测试了上述代码。它起作用了D
再次更新:它应该是
项目
而不是
项目
,因为
项目
中。或者如果你喜欢另一种方式,它可以是
Item
中的
Value
Item

现在你更新了你的问题,很明显你做错了什么。:)

您应该传递属性的名称,而不是指定的xml名称

。。。而不是

overrides.Add(typeof(Item), "Value", attributes);
正如Fun Mun Pieng的回答中所述,您不应该再添加XmlElementAttribute,因此删除以下行:

 attributes.XmlElements.Add(new XmlElementAttribute("Item"));  

但是希望在某些情况下忽略它,而不是一直忽略它。可以添加Item类吗?旁注:
[Serializable]
属性在.NET中处理Xml序列化时没有意义。我只是想到了同样的事情,这可能是解决方案。这确实提出了一个问题,当XmlElement已经被应用时,该怎么做,如何删除它?是的,我在尝试不同的事情时复制并粘贴了一行额外的内容,但这也不起作用:/而且由于某些原因,没有必要深入研究,在序列化之前删除元素不是一件简单的事情。@Marcom:显然它是为了好玩,Mun Pieng,而且所有文档都指定它应该可以工作。@Marcom:它可能不起作用,因为项目和项目之间存在差异。是的,这就是问题所在。我觉得这门课很明显!这也意味着代码的某些旧部分也是错误的。耶:/
overrides.Add(typeof(Item), "DefaultValue", attributes);
overrides.Add(typeof(Item), "Value", attributes);
 attributes.XmlElements.Add(new XmlElementAttribute("Item"));