首页 > 解决方案 > 序列化派生类时如何让xml数据合同序列化程序忽略基类属性

问题描述

我有一个基类,它是 xml 可序列化的,并用 [DataContract] 装饰。它不是我的,我不能改变它。

我有一个派生类是我的。我想在派生类的基类中覆盖一个属性。基类中的该属性用 [DataMember] 修饰。

它看起来(示意性地)像这样:

[Serializable]
[DataContract(Namespace="http://someone-else.com/DataContracts/Shared/Stuff/")]
public class SomeoneElseBase
{
    [DataMember]
    public string Name { get; set; }

    [DataMember]
    public string Type { get; set; }
}

[Serializable]
[DataContract]
public class MyDerived: SomeoneElseBase
{
    [DataMember]
    public new string Type
    {
        get => MyTransformMethod(base.Type);
        set => base.Type = value;
    }
}

当 MyDerived 的实例使用 Json 的 Data Contract Serializer 进行序列化时,它的工作方式完全符合我的预期。序列化的 Json 恰好有一个名为“Type”的属性,它保存了以我需要的方式转换的值。

但是,当使用 XML 的 Data Contract Serializer 序列化 MyDerived 的实例时,它会稍微复杂一些。生成的 xml 有两个名为“Type”的元素,一个具有命名空间“http://someone-else.com/DataContracts/Shared/Stuff/”,另一个没有指定命名空间。我想获得序列化的xml,它在命名空间上没有“Type”的基类元素,只是派生类。

这可能吗?如何?

标签: c#xmldatacontractserializer

解决方案


推荐阅读