Ich arbeite an einem Projekt, das sich mit einigen alten Webservices verbinden muss, die einige hierarchische Daten für Anfragen und Antworten in einzelne Strings von hierarchischem XML packen.Wie kann ich Arrays dazu bringen, einen anderen Namen als "Items" zu haben, wenn ich C# -Code aus einem XSD-Schema erzeuge?
Ich habe xsd.exe verwendet, um XSDs aus XML-Fragmenten für Beispielanforderungen und -antworten zu generieren, diese gegebenenfalls zu ändern, um die bestmögliche Definition zu erhalten, und xsd.exe erneut zum Generieren von C# -Objekten zu verwenden. Die Manager, die die Webdienste aufrufen, können dann diese stark typisierten Anforderungsobjekte als Parameter verwenden, sie in Zeichenfolgen serialisieren, um die Aufrufe auszuführen, die Antworten als Zeichenfolgen zurückgeben, sie in die stark typisierten Antwortobjekte deserialisieren und diese zurückgeben.
Wenn ich, sagen wir, eine Liste von Zeichenfolgen habe, kann ich eine gültige XSD haben, die es als einen komplexen Typ einer unbegrenzten xs: Auswahl von xs: string -Elementen betrachtet, und dann wird es einfach zu einem String-Array deserialisiert. Das ist schön und einfach zu bewältigen. Das lästige Problem ist, dass es aus irgendeinem Grund keine Möglichkeit gibt, das String Array anders als "Items" aufzurufen. Egal was Ich füge zum Schema hinzu, ich kann nicht xsd.exe, um einen anderen Namen zu schreiben.
Hier ist ein Beispiel XSD-Schema:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="AccountStatusRequest" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="AccountStatusRequest">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded" id="AccountRowIDs">
<xs:element nillable="true" type="xs:string" id="AccountRowID" name="AccountRowID"/>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
Und die resultierende Klasse:
public partial class AccountStatusRequest {
private string[] itemsField;
[System.Xml.Serialization.XmlElementAttribute("AccountRowID", Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=true)]
public string[] Items {
get {
return this.itemsField;
}
set {
this.itemsField = value;
}
}
}
ich ziemlich viel versucht haben, das Hinzufügen alle msdata: Attribut in intellisense sowohl für die Wahl und das innere Element und nichts macht einen Unterschied.
Nur aus Gründen der Argumentation, habe ich ein paar zusätzliche ähnliche Entscheidungen zu diesem complex, zu sehen, ob es zwingen würde, einen Namen für das String-Arrays zu verwenden, sondern es gab mir Artikel, Posten1, effekten2 ...
ich wirklich nicht will, dass es eine Reihe von seinem eigenen Typ zu haben zu sein, die nur einen String hält, aber ich will nicht, dass auch wirklich lassen sie es "Artikel genannt ", ohne XML-Kommentare (weiß jemand, wie man THOSE zu einem xsd hinzufügt?), wenn es einen aussagekräftigeren Namen haben sollte. Und ich kann es definitiv nicht einfach manuell als den gewünschten Workflow ändern, wenn sich die Webdienst-Schemas ändern, um die XSDs zu ändern und dann die Klassen von ihnen neu zu generieren.
Dies scheint wie ein anderes dieser Dinge, die xsd.exe unterstützen sollte. Gibt es etwas, das mir fehlt? Soll ich irgendwie anders vorgehen? Oder gibt es stattdessen ein alternatives Tool, das weniger lahm ist?
Leider nicht sicher, wie ich diese Antwort verpasst - es funktionierte für mich +1 – RobS