Các tùy chọn để tạo .NET 4.0 c # class (thực thể) từ tệp xsd, sử dụng Visual Studio 2010 là gì?
Các tùy chọn để tạo .NET 4.0 c # class (thực thể) từ tệp xsd, sử dụng Visual Studio 2010 là gì?
Câu trả lời:
đủ đơn giản; chỉ cần chạy (tại dấu nhắc lệnh vs)
xsd your.xsd /classes
(sẽ tạo ra your.cs
). Tuy nhiên, lưu ý rằng hầu hết các tùy chọn nội tại ở đây không thay đổi nhiều kể từ 2.0
Đối với các tùy chọn, sử dụng xsd /?
hoặc xem MSDN ; ví dụ /enableDataBinding
có thể hữu ích
xsd schema1.xsd schema2.xsd schema3.xsd /c
xsd.exe như được đề cập bởi Marc Gravell. Cách nhanh nhất để đứng dậy và chạy IMO.
Hoặc nếu bạn cần linh hoạt hơn / tùy chọn:
bổ trợ xsd2code VS (Codeplex)
Tôi chỉ cho bạn ở đây cách dễ nhất bằng Vs2017 và Vs2019 Mở xsd của bạn bằng Visual Studio và tạo tệp xml mẫu như trong url được đề xuất.
2. Trong Schema XML XML Lược đồ Explorer cuộn xuống hết cỡ để tìm nút gốc / dữ liệu. Nhấp chuột phải vào nút gốc / nút dữ liệu và nó sẽ hiển thị Tập tin XML Tạo mẫu XML. Nếu nó không hiển thị, điều đó có nghĩa là bạn không ở trên nút phần tử dữ liệu nhưng bạn đang ở trên bất kỳ nút định nghĩa dữ liệu nào.
xsd.exe không hoạt động tốt khi bạn có các tham chiếu vòng tròn (tức là một loại có thể sở hữu một phần tử thuộc loại riêng của nó trực tiếp hoặc gián tiếp).
Khi tham chiếu tròn tồn tại, tôi sử dụng Xsd2Code. Xsd2Code xử lý tốt các tham chiếu vòng tròn và hoạt động trong VS IDE, đây là một điểm cộng lớn. Nó cũng có rất nhiều tính năng bạn có thể sử dụng như tạo mã tuần tự hóa / giải tuần tự hóa. Hãy chắc chắn rằng bạn bật GenerateXMLAttribution nếu bạn đang tạo tuần tự hóa (nếu không bạn sẽ có ngoại lệ cho việc đặt hàng nếu không được xác định trên tất cả các yếu tố).
Không hoạt động tốt với các tính năng lựa chọn. bạn sẽ kết thúc với danh sách / bộ sưu tập đối tượng thay vì loại bạn muốn. Tôi khuyên bạn nên tránh lựa chọn trong xsd của mình nếu có thể vì điều này không tuần tự hóa / giải tuần tự hóa tốt thành một lớp được gõ mạnh. Nếu bạn không quan tâm đến điều này, thì đó không phải là vấn đề.
Bất kỳ tính năng nào trong xsd2code đều được giải nén là System.Xml.XmlE bổ sung mà tôi thấy thực sự tiện lợi nhưng có thể là một vấn đề nếu bạn muốn các đối tượng gõ mạnh. Tôi thường sử dụng bất kỳ khi nào cho phép dữ liệu cấu hình tùy chỉnh, vì vậy XmlE bổ sung thuận tiện để chuyển sang một trình giải mã XML khác được tùy chỉnh xác định ở nơi khác.
Để có giải pháp nhanh chóng và lười biếng , (và hoàn toàn không sử dụng VS), hãy thử các trình chuyển đổi trực tuyến này:
XSD => XML => Các lớp C #
Ví dụ XSD:
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="shiporder">
<xs:complexType>
<xs:sequence>
<xs:element name="orderperson" type="xs:string"/>
<xs:element name="shipto">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="item" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string"/>
<xs:element name="note" type="xs:string" minOccurs="0"/>
<xs:element name="quantity" type="xs:positiveInteger"/>
<xs:element name="price" type="xs:decimal"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="orderid" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:schema>
Chuyển đổi sang XML:
<?xml version="1.0" encoding="utf-8"?>
<!-- Created with Liquid Technologies Online Tools 1.0 (https://www.liquid-technologies.com) -->
<shiporder xsi:noNamespaceSchemaLocation="schema.xsd" orderid="string" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<orderperson>string</orderperson>
<shipto>
<name>string</name>
<address>string</address>
<city>string</city>
<country>string</country>
</shipto>
<item>
<title>string</title>
<note>string</note>
<quantity>3229484693</quantity>
<price>-6894.465094196054907</price>
</item>
<item>
<title>string</title>
<note>string</note>
<quantity>2181272155</quantity>
<price>-2645.585094196054907</price>
</item>
<item>
<title>string</title>
<note>string</note>
<quantity>2485046602</quantity>
<price>4023.034905803945093</price>
</item>
<item>
<title>string</title>
<note>string</note>
<quantity>1342091380</quantity>
<price>-810.825094196054907</price>
</item>
</shiporder>
Chuyển đổi cấu trúc lớp này:
/*
Licensed under the Apache License, Version 2.0
http://www.apache.org/licenses/LICENSE-2.0
*/
using System;
using System.Xml.Serialization;
using System.Collections.Generic;
namespace Xml2CSharp
{
[XmlRoot(ElementName="shipto")]
public class Shipto {
[XmlElement(ElementName="name")]
public string Name { get; set; }
[XmlElement(ElementName="address")]
public string Address { get; set; }
[XmlElement(ElementName="city")]
public string City { get; set; }
[XmlElement(ElementName="country")]
public string Country { get; set; }
}
[XmlRoot(ElementName="item")]
public class Item {
[XmlElement(ElementName="title")]
public string Title { get; set; }
[XmlElement(ElementName="note")]
public string Note { get; set; }
[XmlElement(ElementName="quantity")]
public string Quantity { get; set; }
[XmlElement(ElementName="price")]
public string Price { get; set; }
}
[XmlRoot(ElementName="shiporder")]
public class Shiporder {
[XmlElement(ElementName="orderperson")]
public string Orderperson { get; set; }
[XmlElement(ElementName="shipto")]
public Shipto Shipto { get; set; }
[XmlElement(ElementName="item")]
public List<Item> Item { get; set; }
[XmlAttribute(AttributeName="noNamespaceSchemaLocation", Namespace="http://www.w3.org/2001/XMLSchema-instance")]
public string NoNamespaceSchemaLocation { get; set; }
[XmlAttribute(AttributeName="orderid")]
public string Orderid { get; set; }
[XmlAttribute(AttributeName="xsi", Namespace="http://www.w3.org/2000/xmlns/")]
public string Xsi { get; set; }
}
}
Chú ý! Hãy xem xét rằng đây chỉ là để Bắt đầu, kết quả rõ ràng là cần tinh chỉnh!
Tôi sử dụng XSD
trong một tập lệnh bó để tạo .xsd
tệp và các lớp XML
trực tiếp:
set XmlFilename=Your__Xml__Here
set WorkingFolder=Your__Xml__Path_Here
set XmlExtension=.xml
set XsdExtension=.xsd
set XSD="C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1\Tools\xsd.exe"
set XmlFilePath=%WorkingFolder%%XmlFilename%%XmlExtension%
set XsdFilePath=%WorkingFolder%%XmlFilename%%XsdExtension%
%XSD% %XmlFilePath% /out:%WorkingFolder%
%XSD% %XsdFilePath% /c /out:%WorkingFolder%
Câu trả lời của Marc Gravells phù hợp với tôi nhưng xsd của tôi có phần mở rộng là .xml. Khi tôi sử dụng chương trình xsd, nó đã cho:
- The table (Amt) cannot be the child table to itself in nested relations.
Theo KB325695 này, tôi đã đổi tên phần mở rộng từ .xml thành .xsd và nó hoạt động tốt.
Tôi đã sử dụng xsd.exe
trong dấu nhắc lệnh của Windows.
Tuy nhiên, vì xml của tôi đã tham chiếu một số xml trực tuyến (trong trường hợp của tôi là http://www.w3.org/1999/xlink.xsd
tham chiếu http://www.w3.org/2001/xml.xsd
), tôi cũng phải tải xuống các sơ đồ đó, đặt chúng vào cùng thư mục với xsd của tôi và sau đó liệt kê các tệp đó trong lệnh:
"C: \ Tệp chương trình (x86) \ Microsoft SDKs \ Windows \ v8.1A \ bin \ NETFX 4.5.1 Công cụ \ xsd.exe" / class / ngôn ngữ: CS your.xsd xlink.xsd xml.xsd
xsd.exe
vì nó không giống như các tài liệu tham khảo vòng tròn, nhưng cuối cùng tôi đã thành công.
Cùng với WSDL, tôi đã có các tệp xsd. Ở trên không hoạt động trong trường hợp của tôi đã đưa ra lỗi. Nó hoạt động như sau
wsdl /l:C# /out:D:\FileName.cs D:\NameApi\wsdl_1_1\RESAdapterService.wsdl
D:\CXTypes.xsd D:\CTypes.xsd
D:\Preferences.xsd