2011-11-23 56 views
2

產生錯誤的名稱屬性值當我使用svcutil.exe的生成自定義包含在XSD文件一個Customer類:SvcUtil工具在DataContractAttribute

<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 
{ 

由於DataContractAttribute的Name屬性具有無效值:「Customer」(以大寫字母開頭),因爲根據xs:元素的name屬性,它應該是:「customer」(以小寫字母開頭) 。

我開始svcutil.exe的如下:

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

生成的XML必須包含一個名爲「客戶」的根元素,我問你,爲什麼svcutil.exe的使這個錯誤。

回答

4

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 {