DataContractSerializer.将元数据导出到一个命名空间中



我希望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>

有人对这些问题提出质疑吗?

  1. 这通常是我要走的路线——给你精确的控制。以及从系统类型派生的问题。有一个古老的笑话男人:"医生,医生,我做这个很疼"医生:"那就别做了"。我会避免从服务边界上的系统类型派生,只定义要传输的数据。很明显,我不知道你的确切情况,但这是我采取的一般方法

  2. 您可以混合和匹配这两种方法-您应该能够用[DataContract]注释枚举,用[EnumMember]注释每个枚举成员,这应该会为您提供所需的

相关内容

最新更新