【发布时间】:2013-06-12 13:46:18
【问题描述】:
我有两个 DataContracts,我使用 DataContractSerializer 将它们序列化为 XML。
我为两个不同的DataContracts 指定了不同的命名空间,但是,每个DataContract 中都有一个DataMember,它属于相同的POD 类型。此 POD 位于不同的 c# 命名空间中。
我想知道是否有一种方法可以根据它所属的包含类型来指定用于此 DataMember 的命名空间。
例如:
namespace NamespaceShared
{
using System.Runtime.Serialization;
[DataContract]
public sealed class SharedType
{
[DataMember(IsRequired = true)]
public int ValueOne { get; set; }
[DataMember(IsRequired = true)]
public int ValueTwo { get; set; }
}
}
namespace NamespaceOne
{
using System.Runtime.Serialization;
using NamespaceShared;
[DataContract(Namespace = "http://namespace.one")]
public sealed class DataContractOne
{
[DataMember(IsRequired = true)]
//[SomeNamespaceAttribute("http://namespace.one")]
private SharedType SharedValue { get; set; }
}
}
namespace NamespaceTwo
{
using System.Runtime.Serialization;
using NamespaceShared;
[DataContract(Namespace = "http://namespace.two")]
public sealed class DataContractTwo
{
[DataMember(IsRequired = true)]
//[SomeNamespaceAttribute("http://namespace.two")]
private SharedType SharedValue { get; set; }
}
}
我正在寻找可以在上面的代码中提供SomeNamespaceAttribute 功能的东西。
注意:我不是在寻找如何更好地组织我的 DataContracts 的建议,因为不幸的是我正在重构遗留代码并且 XML 格式无法更改。
【问题讨论】:
-
是否可以选择切换到 XmlSerializer? XmlElementAttribute 具有指定命名空间的选项。
-
很遗憾没有。但是感谢您指出这一点。
-
想要更改命名空间的原因是什么?你想改变什么?
-
我正在处理一些遗留代码,不想更改现有的 XML 模式。但是我想在新的命名空间中重用一些现有的对象。
标签: c# xml xml-serialization datacontractserializer