微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

序列化派生类时如何获取xml数据协定序列化程序以忽略基类属性

如何解决序列化派生类时如何获取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;
    }
}

当使用Data Contract Serializer for Json对MyDerived的实例进行序列化时,它的工作原理与我预期的完全一样。序列化的Json恰好具有一个名为“ Type”的属性,并且它具有按我需要的方式转换的值。

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

这可能吗?怎么样?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。