สร้างคลาส C # จาก XML


คำตอบ:


338

ใช่โดยใช้xsd.exe

D:\temp>xsd test.xml
Microsoft (R) Xml Schemas/DataTypes support utility
[Microsoft (R) .NET Framework, Version 4.0.30319.1]
Copyright (C) Microsoft Corporation. All rights reserved.
Writing file 'D:\temp\test.xsd'.

D:\temp>xsd test.xsd /classes
Microsoft (R) Xml Schemas/DataTypes support utility
[Microsoft (R) .NET Framework, Version 4.0.30319.1]
Copyright (C) Microsoft Corporation. All rights reserved.
Writing file 'D:\temp\test.cs'.

หมายเหตุ

ตอบวิธีเปลี่ยนไดเรกทอรีในพรอมต์คำสั่งสำหรับนักพัฒนาเป็น d: \ temp อาจมีประโยชน์

ถ้าคุณสร้างชั้นเรียนสำหรับอาร์เรย์หลายมิติมีข้อผิดพลาดใน xsd.exe กำเนิด แต่มีวิธีการแก้ปัญหา


18
ในการใช้งานให้xsdรันCommand Command Prompt สำหรับ VS2013ใต้เมนูเครื่องมือของคุณ
Jess

13
xsd.exeสามารถพบได้ใน:C:\Program Files (x86)\Microsoft SDKs\Windows
จูเลียน

7
ได้รับการเตือนถ้าคุณมีไฟล์ XML ที่ซับซ้อนขนาดใหญ่คลาสที่สร้างจะน่าเกลียดจนแทบจะใช้ไม่ได้)
Matthew Lock

3
สำหรับฉันxsd.exeพบได้ที่: C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools
user1991179

414

หากคุณกำลังทำงานกับโครงการ. NET 4.5 ใน VS 2012 (หรือใหม่กว่า) คุณสามารถวางไฟล์ XML ของคุณเป็นคลาสพิเศษได้

  1. คัดลอกเนื้อหาไฟล์ XML ของคุณไปยังคลิปบอร์ด
  2. ในตัวแก้ไขเลือกตำแหน่งที่คุณต้องการวางคลาสของคุณ
  3. จากเมนูให้เลือก EDIT > Paste Special > Paste XML As Classes

22
ฉันแค่ต้องการให้คุณสมบัติที่สร้างโดยอัตโนมัตินี้สร้างขึ้นเช่น "วาง JSON เป็นคลาส" ขณะนี้สิ่งนี้หมายถึงผลลัพธ์โค้ดแบบพับปด 6 เท่าซึ่งอ่านได้ยากกว่ามาก สิ่งนี้ทำให้ฉันมองหาเครื่องมืออื่นอย่างน่าเสียดาย
Nicholas Petersen

1
นี่เป็นสิ่งที่เหลือจาก VS 2013 หรือไม่
Roger

3
@Roger ฉันไม่ได้ใช้ VS 2013 แต่ฉันคิดว่าคุณสมบัตินี้ควรจะอยู่ที่นั่นตรวจสอบให้แน่ใจว่าโครงการของคุณกำหนดเป้าหมายเป็น. NET 4.5 Framework
miszczu

2
สิ่งนี้เร็วกว่าxsdมาก แต่เอาต์พุตนั้นใกล้เคียงกัน
Jess

4
หากคุณไม่มี resharper ใช้ regex แทนที่ด้วยpublic (\w+) (\w+)\r\n +\{\r\n +get\r\n +\{\r\n +return this.*;\r\n +\}\r\n +set\r\n +\{\r\n +this.*;\r\n +\}\r\n +\}\r\n=> public $1 $2 { get; set; }และ `ส่วนตัว \ w + \ w + ฟิลด์; \ r \ n \ r \ n`
AlexDev

44

ตอนแรกฉันคิดว่า Paste Special เป็นจอกศักดิ์สิทธิ์! แต่จากนั้นฉันก็ลองแล้วผมก็เปลี่ยนเป็นสีขาวเหมือนหนัง Indiana Jones

แต่ตอนนี้ฉันใช้http://xmltocsharp.azurewebsites.net/และตอนนี้ฉันยังเด็กเหมือนเดิม

นี่คือส่วนของสิ่งที่สร้าง:

namespace Xml2CSharp
{
    [XmlRoot(ElementName="entry")]
    public class Entry {
        [XmlElement(ElementName="hybrisEntryID")]
        public string HybrisEntryID { get; set; }
        [XmlElement(ElementName="mapicsLineSequenceNumber")]
        public string MapicsLineSequenceNumber { get; set; }

5
ผลลัพธ์ของเครื่องมือนี้เป็นสิ่งที่ดี แต่ฉันแค่อยากให้มีคำเตือนว่าอย่าส่งข้อมูลที่ละเอียดอ่อนใด ๆ มายังไซต์นี้ (หรืออื่น ๆ สำหรับเรื่องนั้น) แม้ว่าฉันจะซาบซึ้งกับบริการที่มีให้ แต่ก็ไม่มีนโยบายความเป็นส่วนตัวและไม่รับประกันว่าสิ่งที่คุณวางจะไม่ถูกบันทึกและตรวจสอบ ฯลฯ
SvenAelterman

2
ฉันมีไฟล์ xml ที่มีความสัมพันธ์แบบเรียกซ้ำ (อาจเรียกว่าความสัมพันธ์แบบวงกลมฉันไม่แน่ใจ) ไฟล์อื่นล้มเหลว แต่xmltocsharp.azurewebsites.netประสบความสำเร็จอย่างมากกับ xml นั้น
Koray

4
@ D.Kermott ขอบคุณสำหรับการเชื่อมโยงเว็บไซต์ฉันได้ดูมันอย่างรวดเร็วและดูเหมือนว่ามันจะทำงานได้ดีกว่าการวางแบบพิเศษรหัสดูดีขึ้นแม้ว่าการทดสอบ xml ของฉันจะสร้างชั้นเรียนมากขึ้นก็ตาม ดีกว่าที่จะใช้
Harag

น่าเสียดายที่มันกลับลำดับของคลาส (รายการนอกรายการสุดท้าย)
Savage

22

ฉันรู้ว่านี่คือโพสต์ที่ค่อนข้างเก่าและคุณอาจย้ายไป

แต่ฉันมีปัญหาเช่นเดียวกับคุณดังนั้นฉันตัดสินใจที่จะเขียนโปรแกรมของฉันเอง

ปัญหาเกี่ยวกับเส้นทาง "xml -> xsd -> classes" สำหรับฉันก็คือมันเพิ่งสร้างก้อนโค้ดที่ไม่สามารถจัดการได้อย่างสมบูรณ์และฉันก็จบการต่อสู้

มันไม่ได้สวยงาม แต่มันก็ทำงานให้ฉันได้

คุณสามารถรับได้ที่นี่: โปรดให้คำแนะนำหากคุณชอบมัน

SimpleXmlToCode


1
สร้างรหัสผิด: // ELEMENTS [XmlIgnore] ค่า DateTime สาธารณะสาธารณะ {รับ; ตั้ง; } [XmlText] ValueString สตริงสาธารณะ {รับ {คืนค่า? "ถูกผิด"; } set {Value = value == "true"; }}
André Fiedler

และผู้สร้างไม่จำเป็น + คุณควรรวมความคิดเห็นสำหรับสมาชิกที่มองเห็นได้ทั่วไป
André Fiedler

1
ในการป้องกันของฉันมันเป็นสิ่งที่ฉันตบด้วยกันอย่างรวดเร็วซึ่งทำงานให้ฉัน ฉันยังไม่ได้กลับไป แต่รู้สึกฟรีเพื่อสนับสนุนการเปลี่ยนแปลงใด ๆ repo
กรงเล็บ

ฉันใช้สิ่งนี้มาสองสามเดือนแล้ว - มันไม่สมบูรณ์แบบ แต่มันมีประโยชน์มากและฉันพบว่ามันสร้าง XML ที่อ่านง่าย / ง่ายกว่าการวางของ VS2013 เป็น XML Talon ชื่นชมมาก
codechinchilla

6

คุณควรพิจารณา svcutil ( คำถาม svcutil )

ทั้ง xsd.exe และ svcutil ทำงานกับไฟล์ XML schema (.xsd) XML ของคุณจะต้องสอดคล้องกับไฟล์สคีมาที่จะใช้โดยเครื่องมือสองอย่างนี้

โปรดทราบว่ามีเครื่องมือของบุคคลที่สามมากมายสำหรับสิ่งนี้


3

คุณสามารถใช้ xsd ตามที่ Darin แนะนำ

นอกจากนั้นขอแนะนำให้แก้ไขไฟล์ test.xsd เพื่อสร้างสคีมาที่เหมาะสมยิ่งขึ้น

type="xs:string"สามารถเปลี่ยนเป็นtype="xs:int"ค่าจำนวนเต็ม
minOccurs="0"สามารถเปลี่ยนเป็นminOccurs="1"ตำแหน่งที่ต้องการฟิลด์
maxOccurs="unbounded"สามารถเปลี่ยนmaxOccurs="1"เป็นที่อนุญาตให้มีเพียงหนึ่งรายการเท่านั้น

คุณสามารถสร้าง xsd-s ขั้นสูงขึ้นได้หากคุณต้องการตรวจสอบความถูกต้องของข้อมูลเพิ่มเติม แต่อย่างน้อยที่สุดจะให้ประเภทข้อมูลที่สมเหตุสมผลใน c # ที่สร้างขึ้น


1

ใช้ไวยากรณ์ด้านล่างเพื่อสร้างคลาสสคีมาจากไฟล์ XSD

C:\xsd C:\Test\test-Schema.xsd /classes /language:cs /out:C:\Test\

0

ในการแปลง XML เป็น C # Class ให้ทำดังนี้

  • ไปที่ Microsoft Visual Studio Marketplace: - https://marketplace.visualstudio.com
  • ในแถบค้นหาให้ป้อนข้อความ: - xml to tool code class
  • ดาวน์โหลดติดตั้งและใช้แอพ

หมายเหตุ: ในช่วงเวลาที่สมบูรณ์แอพนี้อาจถูกแทนที่ แต่มีโอกาสที่จะมีเครื่องมืออื่นที่ทำสิ่งเดียวกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.