Ist svcutil.exe ein Ersatz für xsd.exe?

Ich bin mit xsd.exe erzeugen Sie c# - Klassen aus .xsd-Datei. Ich lief in das gleiche Problem wird hier besprochen und auf anderen Seiten, wo xsd.exe generiert-Typ [] - arrays statt der generischen List-Sammlungen für die Typen in der .xsd-Datei. Einige Leute haben vorgeschlagen, dass svcutil.exe kann als Ersatz verwendet werden für xsd.exe wenn Sie übergeben die /dataContractOnly parameter svcutil.exe. Es scheint jedoch, wie die Menschen sind Irre, weil svcutil.exe tatsächlich erzeugt System.Xml.XmlNode [] " array-Eigenschaften erstellen, anstatt Typen, basierend auf dem schema in der .xsd-Datei.

Betrachten Sie beispielsweise diese einfache .xsd-schema:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema targetNamespace="http://tempuri.org/XMLSchema.xsd"
elementFormDefault="qualified"
xmlns="http://tempuri.org/XMLSchema.xsd"
xmlns:mstns="http://tempuri.org/XMLSchema.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
    <xs:complexType name="Employee">
        <xs:all>
            <xs:element name="FirstName" type="xs:string"></xs:element>
            <xs:element name="LastName" type="xs:string"></xs:element>
        </xs:all>
    </xs:complexType>

    <xs:element name="Employees">
        <xs:complexType>
            <xs:sequence maxOccurs="unbounded">
                <xs:element name="Employee" type="Employee"></xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

'xsd.exe /Klassen Beispiel.xsd' erzeugt:

public partial class Employees {

    private Employee[] employeeField;

    public Employee[] Employee {
        get { return this.employeeField; }
        set { this.employeeField = value; }
    }
}

public partial class Employee {

    private string firstNameField;

    private string lastNameField;

    public string FirstName {
        get { return this.firstNameField; }
        set { this.firstNameField = value; }
    }

    public string LastName {
        get { return this.lastNameField; }
        set { this.lastNameField = value; }
    }
}

'svcutil.exe /target:code /dataContractOnly /serializer:XmlSerializer /importXmlTypes /collectionType:System.Sammlungen.Generisches.List`1.Beispiel.xsd' erzeugt:

public partial class Employee : object, System.Runtime.Serialization.IExtensibleDataObject{

    private System.Runtime.Serialization.ExtensionDataObject extensionDataField;

    private string FirstNameField;

    private string LastNameField;

    public System.Runtime.Serialization.ExtensionDataObject ExtensionData{
        get{ return this.extensionDataField; }
        set{ this.extensionDataField = value; }
    }

    public string FirstName{
        get{ return this.FirstNameField; }
        set{ this.FirstNameField = value; }
    }

    public string LastName{
        get{ return this.LastNameField; }
        set{ this.LastNameField = value; }
    }
}

public partial class Employees : object, System.Xml.Serialization.IXmlSerializable{

    private System.Xml.XmlNode[] nodesField;

    private static System.Xml.XmlQualifiedName typeName = new System.Xml.XmlQualifiedName("Employees", "http://tempuri.org/XMLSchema.xsd");

    public System.Xml.XmlNode[] Nodes{
        get{ return this.nodesField; }
        set{ this.nodesField = value; }
    }

    public void ReadXml(System.Xml.XmlReader reader){
        this.nodesField = System.Runtime.Serialization.XmlSerializableServices.ReadNodes(reader);
    }

    public void WriteXml(System.Xml.XmlWriter writer){
        System.Runtime.Serialization.XmlSerializableServices.WriteNodes(writer, this.Nodes);
    }

    public System.Xml.Schema.XmlSchema GetSchema(){
        return null;
    }

    public static System.Xml.XmlQualifiedName ExportSchema(System.Xml.Schema.XmlSchemaSet schemas){
        System.Runtime.Serialization.XmlSerializableServices.AddDefaultSchema(schemas, typeName);
        return typeName;
    }
}
  1. Ist svcutil.exe eigentlich sollte ein Ersatz für xsd.exe? Die erzeugte Ausgabe scheint zu sein, ganz anders.
  2. Zu diesem Zeitpunkt sieht es aus wie ich haben xsd.exe erstellen von Klassen aus meiner .xsd-Datei und dann manuell zu optimieren, die den code, um es in die form, die ich will. Ich merke, dass das rein erzeugte code wäre ideal, aber ich Frage mich, wenn andere Personen xsd.exe als Ausgangspunkt und dann arbeiten von dort oder wenn ich brauche zu betrachten, einen anderen Ansatz insgesamt?
  3. Gibt es irgendwelche updates zu xsd.exe in Visual Studio 2010?

InformationsquelleAutor der Frage jameswelle | 2009-08-07

Schreibe einen Kommentar