DataContractSerializer的。将元数据导出到一个名称空

时间:2012-01-27 07:35:42

标签: c# wcf metadata datacontractserializer svcutil.exe

我想svcutil将我的库中的元数据导出到一个xsd文件中。由于它通过命名空间将元数据划分为不同的文件,我想将所有类重新定义为唯一的命名空间。 我可以通过两种方式“尝试”做到这一点: 1)像这样在DataContract属性中为每个类重新定义它 [DataContract(命名空间= “http://mynamspace.com”)] 但我得到了下一个障碍 - I can't set atribute on class that is derived from standard class

2)重新定义程序集中每个名称空间的名称空间,包括导出类。 [assembly:ContractNamespaceAttribute(SerializationConstants.DefaultNamespace,ClrNamespace =“UBP.AddInfo”)] 但在这里,我挑战另一个问题 - 这个指令并不反映在enumeratons上。它们仍然被导出到在程序集中定义的命名空间中。所以它迫使我直接将属性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 个答案:

答案 0 :(得分:2)

  1. 这通常是我要去的路线 - 给你精确的控制。以及从系统类型派生的问题。有一个老笑话男人:“当我这样做时医生医生疼”博士:“那就不要这样做了”。我会避免从我的服务边界上的系统类型派生出来,只是定义你想要传输的数据。显然我不知道你的具体情况,但这是我采取的一般方法

  2. 您可以混合使用这两种方法 - 您应该可以使用[DataContract]和每个枚举成员[EnumMember]注释枚举,并且应该为您提供所需的内容