Svcutil генерирует неправильное значение свойства Name в DataContractAttribute - PullRequest
2 голосов
/ 23 ноября 2011

Когда я использую svcutil.exe для генерации класса Customer из определения, содержащегося в файле xsd:

<xs:schema ...>

<xs:element name="customer" type="Customer" nillable="true" />

<xs:complexType name="Customer">
  <xs:sequence>
    <xs:element name="id" type="xs:decimal" minOccurs="0" />
    <xs:element name="first_name" type="xs:string" />
    <xs:element name="last_name" type="xs:string" />
    <xs:element name="phone" type="Phone" minOccurs="0" />
    <xs:element name="email" type="Email" minOccurs="0" />
    <xs:element name="personal_id" type="xs:string" minOccurs="0" />
    <xs:element name="address" type="Address" minOccurs="0" />
    <xs:element name="status" type="CustomerStatus" />
  </xs:sequence>
</xs:complexType>

</xs:schema>

Я получаю следующее определение класса:

[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name="Customer", Namespace="http://www.bluewhite.pl/api/1.0")]
public partial class Customer : object, System.Runtime.Serialization.IExtensibleDataObject
{

Поскольку свойство Name объекта DataContractAttribute имеет недопустимое значение: «Клиент» (начиная с заглавной буквы), поскольку в соответствии со свойством name элемента xs: оно должно быть: «клиент» (начиная с строчной буквы).

Я запускаю svcutil.exe следующим образом:

svcutil.exe" *.xsd /t:code /dconly /n:*,Esap.AdtZapisoMessages /o:Messages.cs /tcv:Version35

Сгенерированный xml должен содержать корневой элемент с именем «customer», и я спрашиваю вас, почему svcutil.exe делает эту ошибку.

1 Ответ

4 голосов
/ 23 ноября 2011

svcutil совершенно правильно там; имя типа - Customer. От:

<xs:complexType name="Customer">

Нижний регистр customer зависит от контекста использования в качестве корневого элемента, однако это скорее элемент xsd / SOAP и не относится просто к типу контракта в отдельности. Обратите внимание, что svcutil интересуется типами контрактов; это другой инструмент для xsd.exe.

Если вы хотите соответствовать определенному XML-макету, svcutil - просто неправильный инструмент; это работа для xsd.exe. Я ожидаю, что xsd.exe выдаст требуемый [XmlRoot("customer")].

Я проверил это, и конечно же:

[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlRootAttribute("customer", Namespace="",
          IsNullable=true)]
public partial class Customer {
...