首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >默认是.NET XmlIgnore吗?

默认是.NET XmlIgnore吗?
EN

Stack Overflow用户
提问于 2009-09-30 01:25:24
回答 2查看 3.5K关注 0票数 4

有没有办法让XmlSerializer默认忽略所有成员,除非我另行说明?

我有一个基类和几个具有许多成员的派生类,但大多数我不希望被序列化。只有选定的几个是可接受的序列化。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-09-30 05:31:23

不,您不能这样做。

XmlSerializer使用“选择退出”过程-它将序列化所有内容(所有公共属性),除非您使用[XmlIgnore]属性显式选择退出。没有办法改变这种行为。

另一方面,.NET 3.5 DataContractSerializer则采取了另一种方法--选择加入。它不会序列化任何东西,除非你特别告诉它,通过用[DataMember]装饰你的成员。

因此,也许DataContract序列化程序可以为您工作?它有更多的优点(不需要无参数的构造函数,也可以序列化内部和私有属性,如果需要的话,它还可以序列化字段而不是属性),并且它的速度得到了调整。也有一些缺点-它不支持XML节点中的属性-因此您必须根据自己的需求进行选择。

Dan Rigsby对这两者进行了很好的比较--来看看吧!

Marc

票数 4
EN

Stack Overflow用户

发布于 2009-09-30 01:41:52

您可以实现IXMLSerializable并确定要序列化的内容。Here就是对象序列化的一个例子。请查看this,以便发布实现IXMLSerializable的正确方法。Here是IXMLSerializable用于某些集合的一个示例。

它看起来像这样:

代码语言:javascript
复制
using System;
using System.Xml;
using System.Xml.Schema;
using System.Xml.Serialization;

namespace ConsoleApplicationCSharp
{
  public class ObjectToSerialize : IXmlSerializable
  {
    public string Value1;
    public string Value2;
    public string Value3;   
    public string ValueToSerialize;
    public string Value4;
    public string Value5;

    public ObjectToSerialize() { }

    public void WriteXml(System.Xml.XmlWriter writer)
    {
      writer.WriteElementString("Val", ValueToSerialize);
    }

    public void ReadXml(System.Xml.XmlReader reader) 
    {
        if (reader.MoveToContent() == XmlNodeType.Element && reader.LocalName == "Event")
        {
            ValueToSerialize = reader["Val"];
            reader.Read();
        }        
    }
    public XmlSchema GetSchema() { return (null); }
    public static void Main(string[] args)
    {
      ObjectToSerialize t = new ObjectToSerialize();
      t. ValueToSerialize= "Hello";
      System.Xml.Serialization.XmlSerializer x = new XmlSerializer(typeof(ObjectToSerialize));
      x.Serialize(Console.Out, t);
      return;
    }
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1495716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档