c# - 是否可以隐藏继承的数据成员?

标签 c# wcf serialization

我有两个类(class)。基类有一个带有 DataMember 的公共(public)属性。现在,我不想在子类中序列化此属性。我无法控制父类,其他几个类确实继承自它。

有没有办法从 WCF 使用的 XmlSerializer 中“隐藏”这个属性? (此处的上下文是 WCF RESTful Web 服务)。

最佳答案

是的,可以使用 XmlAttributeOverrides类,以及 XmlIgnore属性(property)。这是基于 MSDN 的示例:

public class GroupBase
{
    public string GroupName;

    public string Comment;
}

public class GroupDerived : GroupBase
{   
}

public class Test
{
   public static void Main()
   {
      Test t = new Test();
      t.SerializeObject("IgnoreXml.xml");
   }

   public XmlSerializer CreateOverrider()
   {
      XmlAttributeOverrides xOver = new XmlAttributeOverrides();
      XmlAttributes attrs = new XmlAttributes();

      attrs.XmlIgnore = true; //Ignore the property on serialization

      xOver.Add(typeof(GroupDerived), "Comment", attrs);

      XmlSerializer xSer = new XmlSerializer(typeof(GroupDerived), xOver);
      return xSer;
   }

   public void SerializeObject(string filename)
   {
      XmlSerializer xSer = CreateOverrider();

      GroupDerived myGroup = new GroupDerived();
      myGroup.GroupName = ".NET";
      myGroup.Comment = "My Comment...";

      TextWriter writer = new StreamWriter(filename);

      xSer.Serialize(writer, myGroup);
      writer.Close();
   }

结果:

<?xml version="1.0" encoding="utf-8"?>
<GroupDerived xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <GroupName>.NET</GroupName>
</GroupDerived>

XmlIgnore = false; 的结果:

<?xml version="1.0" encoding="utf-8"?>
<GroupDerived xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <GroupName>.NET</GroupName>
  <Comment>My Comment...</Comment>
</GroupDerived>

关于c# - 是否可以隐藏继承的数据成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22760605/

相关文章:

C#:科学记数法字符串到 Int64 的转换失败

c# - 在每个 Controller 的 WebAPI 上强制 SnakeCase 反序列化

java - 如何在 Eclipse 中生成自定义的serialVersionUID

javascript - 如何从 asp.net 中的 javascript 访问 C# 数组

C# Azure AppendBlob AppendBlock 添加大于 4mb 限制的文件

c# - DependencyResolutionException 检测到循环组件依赖性 : How to use Autofac to inject decorator?

java - Eclipse Android 插件在 basicHttpBinding 中调用 WCF Web 服务

c# - 了解 WCF ServiceBehaviorProperty ConcurrencyMode

c# - 如何从客户端记录完整的原始 WCF 客户端请求?

java - 将 Java 中的对象列表序列化为 json