DataContractSerializer.Экспорт метаданных в одно пространство имен - PullRequest
0 голосов
/ 27 января 2012

Я хочу svcutil экспортировать метаданные из моих библиотек в один файл xsd. Поскольку он разделяет метаданные на разные файлы по пространству имен, я хочу переопределить его для всех классов в едином пространстве имен. Я могу «попробовать» сделать это двумя способами: 1) Переопределите его для каждого класса в атрибуте DataContract, как это [DataContract (Namespace = "http://mynamspace.com")] но я получаю следующее препятствие - Я не могу установить атрибут для класса, производного от стандартного класса

2) Переопределить пространство имен для каждого пространства имен в сборке, включая экспорт классов. [Assembly: 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 голосов
/ 27 января 2012
  1. Как правило, это маршрут, по которому я бы пошел - дает вам точный контроль.И проблема с производным от типа системы.Есть старая шутка: «Доктор, доктор, мне больно, когда я так поступаю» Доктор: «Тогда не делай этого».Я бы не использовал производные типы систем на границах моих служб и просто определял данные, которые вы хотите транспортировать.Очевидно, я не знаю вашей точной ситуации, но я бы выбрал общий подход

  2. Вы можете смешивать и сочетать два подхода - вы должны иметь возможность комментировать перечисления с [DataContract] и каждый член enum с [EnumMember], и это должно дать вам то, что вам нужно

...