मैं xsd.exe का उपयोग कर रहा हूं ताकि एक .xsd फ़ाइल से कुछ सी # कक्षाएं उत्पन्न हो सकें। मैं उसी समस्या में भाग गया जो यहां और अन्य साइटों पर शामिल है जहां xsd.exe .xsd फ़ाइल में प्रकारों के लिए सामान्य सूची संग्रह के बजाय प्रकार [] arrays उत्पन्न करता है। कुछ लोगों ने सुझाव दिया है कि svcutil.exe को xsd.exe के प्रतिस्थापन के रूप में उपयोग किया जा सकता है यदि आप svcutil.exe पर/dataContract केवल पैरामीटर पास करते हैं। हालांकि, ऐसा लगता है कि उन लोगों को गलत माना जाता है क्योंकि svcutil.exe वास्तव में .xsd फ़ाइल में स्कीमा के आधार पर प्रकार बनाने के बजाय System.Xml.XmlNode [] सरणी गुण उत्पन्न करता है।क्या svcutil.exe xsd.exe के लिए एक प्रतिस्थापन है?
उदाहरण के लिए, इस सरल .xsd स्कीमा दिया:
<?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/वर्गों Example.xsd' उत्पन्न करता है:
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/लक्ष्य: कोड/dataContractOnly/serializer: XmlSerializer/importXmlTypes /collectionType:System.Collections.Generic.List`1 Example.xsd 'उत्पन्न करता है:
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;
}
}
क्या svcutil.exe वास्तव में xsd.exe के प्रतिस्थापन माना जाता है? उत्पन्न उत्पादन काफी अलग लगता है।
इस बिंदु पर, ऐसा लगता है कि मैं xsd.exe उपयोग करने के लिए मेरी .XSD फ़ाइल से कक्षाएं बनाने के लिए करना होगा और फिर मैन्युअल रूप मैं चाहता हूँ में इसे पाने के लिए कोड में और सुधार। मुझे एहसास है कि पूरी तरह से जेनरेट कोड का उपयोग आदर्श होगा, लेकिन मैं सोच रहा था कि क्या अन्य लोग xsd.exe का उपयोग शुरुआती बिंदु के रूप में कर रहे हैं और फिर वहां से काम कर रहे हैं या यदि मुझे एक और दृष्टिकोण पूरी तरह से विचार करने की आवश्यकता है?
क्या विजुअल स्टूडियो 2010 में xsd.exe के लिए कोई अपडेट हैं?
svcutil xsd.exe के प्रतिस्थापन के रूप में नहीं था। जितना हो सके उतने करीब पहुंचने के लिए, '/ dataContractOnly' और'/serializer: XmlSerializer' स्विच का उपयोग करने का प्रयास करें। –
सेवा उपयोग 'xs: all' विकल्प द्वारा भ्रमित हो रहा है। यदि आपका एक्सएसडी 'xs: अनुक्रम' का उपयोग कर रहा था, तो svcUtil उचित आउटपुट उत्पन्न करेगा। डेटाकंट्रैक सीरियलाइज़र और svcUtil पर दस्तावेज़ों से: xs: सभी - निषिद्ध। http://msdn.microsoft.com/en-us/library/ms733112(v=vs.110).aspx – jessehouwing
आप एक ही सवाल [यहां] करने के लिए अपने उत्तर मिल सकता है [1] [1 ]: http://stackoverflow.com/a/24557248/1125467 – vivekp