DataContractSerializer.将元数据导出到一个命名空间中
本文关键字:一个 命名空间 元数据 DataContractSerializer | 更新日期: 2023-09-27 18:21:39
我希望svcutil将我的库中的元数据导出到一个xsd文件中。由于它按名称空间将元数据划分为不同的文件,我想将所有类的元数据重新定义为唯一的名称空间。我可以通过两种方式"尝试":1) 像这样为DataContract属性中的每个类重新定义它[DataContract(命名空间="http://mynamspace.com")]但我遇到了下一个障碍——我不能在从标准类派生的类上设置atribute
2) 为程序集中的每个命名空间重新定义命名空间,其中包括导出类。[程序集:ContractNamespaceAttribute(SerializationConstants.DefaultNamespace,ClrNamespace="UBP.AddInfo")]但在这里,我质疑另一个问题——这个指令没有反映枚举。它们仍然被导出到命名空间中,就像它在程序集中定义的那样。因此,它迫使我直接将属性DataContract设置为这些枚举。但是!!!!在这种情况下,枚举导出不正确。代替
<xs:simpleType name="AddInfoValueType">
<xs:restriction base="xs:string">
<xs:enumeration value="String" />
<xs:enumeration value="DateTime" />
<xs:enumeration value="Number" />
<xs:enumeration value="BynaryData" />
</xs:restriction>
</xs:simpleType>
我得到
<xs:simpleType name="AddInfoValueType">
<xs:restriction base="xs:string" />
</xs:simpleType>
有人对这些问题提出质疑吗?
-
这通常是我要走的路线——给你精确的控制。以及从系统类型派生的问题。有一个古老的笑话男人:"医生,医生,我做这个很疼"医生:"那就别做了"。我会避免从服务边界上的系统类型派生,只定义要传输的数据。很明显,我不知道你的确切情况,但这是我采取的一般方法
-
您可以混合和匹配这两种方法-您应该能够用
[DataContract]
注释枚举,用[EnumMember]
注释每个枚举成员,这应该会为您提供所需的