Tạo lớp C # từ XML


Câu trả lời:


338

Có, bằng cách sử dụng 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'.

Ghi chú

Trả lời cách thay đổi thư mục trong Dấu nhắc nhà phát triển thành d: \ temp có thể hữu ích.

Nếu bạn tạo các lớp cho mảng đa chiều, có một lỗi trong trình tạo XSD.exe, nhưng có cách giải quyết .


18
Để sử dụng, hãy xsdchạy Dấu nhắc nhà phát triển cho VS2013 trong menu công cụ của bạn.
Jess

13
xsd.execó thể được tìm thấy dưới:C:\Program Files (x86)\Microsoft SDKs\Windows
Julian

7
được cảnh báo nếu bạn có một tệp XML phức tạp lớn, lớp được tạo sẽ xấu đến mức gần như không thể sử dụng được;)
Matthew Lock

3
Đối với tôi xsd.exeđã được tìm thấy tại: C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools
user1991179

413

Nếu bạn đang làm việc với dự án .NET 4.5 trong VS 2012 (hoặc mới hơn), bạn chỉ có thể Dán đặc biệt tệp XML của mình dưới dạng các lớp.

  1. Sao chép nội dung tệp XML của bạn vào clipboard
  2. Trong trình chỉnh sửa, chọn nơi bạn muốn dán các lớp của mình
  3. Từ menu, chọn EDIT > Paste Special > Paste XML As Classes

22
Tôi chỉ muốn các thuộc tính được triển khai tự động này, giống như nó làm "Dán JSON dưới dạng các lớp". Hiện tại điều này có nghĩa là một kết quả mã 6 lần, khó đọc hơn rất nhiều. Điều này một mình làm cho tôi tìm kiếm một công cụ khác, không may.
Nicholas Petersen

1
Đây có phải là ra khỏi VS 2013?
Roger

3
@Roger Tôi chưa sử dụng VS 2013, nhưng tôi nghĩ tính năng này nên có, hãy đảm bảo rằng dự án của bạn đang nhắm mục tiêu .NET 4.5 Framework
miszczu

2
Điều này nhanh hơn nhiều xsd, nhưng đầu ra là như nhau.
Jess

4
Nếu bạn không chia sẻ lại, hãy sử dụng regex thay thế bằng 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; }và `private \ w + \ w + Field; \ r \ n \ r \
n`

44

Lúc đầu tôi nghĩ Paste đặc biệt là chén thánh! Nhưng sau đó tôi đã thử nó và tóc tôi chuyển sang màu trắng giống như bộ phim Indiana Jones.

Nhưng bây giờ tôi sử dụng http://xmltocsharp.azurewebsites.net/ và bây giờ tôi vẫn trẻ như mọi khi.

Đây là một phân đoạn của những gì nó tạo ra:

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
Đầu ra của công cụ này là tốt, nhưng tôi chỉ muốn đưa ra một lời cảnh báo ra khỏi đó để không gửi bất kỳ dữ liệu nhạy cảm nào đến trang web này (hoặc bất kỳ dữ liệu nào khác cho vấn đề đó). Mặc dù tôi đánh giá cao dịch vụ được cung cấp, không có chính sách quyền riêng tư và không có gì đảm bảo rằng những gì bạn dán sẽ không được ghi lại và kiểm tra, v.v.
SvenAelterman

2
Tôi đã có một tệp xml có một số quan hệ đệ quy (có thể nó được gọi là quan hệ vòng tròn, tôi không chắc chắn.) Những người khác đã thất bại nhưng xmltocsharp.azurewebsites.net đã rất thành công trên xml đó.
Koray

4
@ D.Kermott cảm ơn vì liên kết trang web, tôi đã xem nhanh về nó và có vẻ như nó hoạt động tốt hơn nhiều so với dán đặc biệt, mã trông sạch hơn, mặc dù xml thử nghiệm của tôi đã tạo ra nhiều lớp hơn, nhưng nó rất nhiều đẹp hơn để sử dụng.
Harag

Đáng tiếc là dường như đảo ngược thứ tự các lớp (các yếu tố bên ngoài được liệt kê cuối cùng)
Savage

22

Tôi nhận ra rằng đây là một bài viết khá cũ và có lẽ bạn đã chuyển sang.

Nhưng tôi có cùng một vấn đề như bạn nên tôi quyết định viết chương trình của riêng mình.

Vấn đề với tuyến đường "xml -> xsd -> class" đối với tôi là nó chỉ tạo ra một khối mã hoàn toàn không thể nhận ra được và tôi đã kết thúc nó.

Nó không phải là cách thanh lịch nhưng nó đã làm công việc cho tôi.

Bạn có thể lấy nó ở đây: Hãy đưa ra gợi ý nếu bạn thích nó.

SimpleXmlToCode


1
tạo mã sai: // NGUYÊN NHÂN [XmlIgnore] công khai Giá trị DateTime {get; bộ; } [XmlText] chuỗi công khai ValueString {get {return Value? "đúng sai"; } đặt {Giá trị = giá trị == "đúng"; }}
André Fiedler

Và các nhà xây dựng là không cần thiết + bạn nên bao gồm các nhận xét cho các thành viên hiển thị công khai
André Fiedler

1
Để bảo vệ tôi, đó là thứ tôi đã tát vào nhau rất nhanh, nó có tác dụng với tôi. Tôi đã không quay lại với nó nhưng cảm thấy thoải mái khi đóng góp cho repo bất kỳ thay đổi nào.
Talon

Tôi đã sử dụng điều này trong một vài tháng - nó không hoàn hảo, nhưng nó khá hữu ích và tôi thấy nó tạo ra XML dễ đọc / đơn giản hơn nhiều so với dán của VS2013 dưới dạng XML. Nhiều đánh giá cao Talon.
codechinchilla

6

Bạn nên xem xét svcutil ( câu hỏi svcutil )

Cả xsd.exe và svcutil đều hoạt động trên tệp lược đồ XML (.xsd). XML của bạn phải tuân theo một tệp lược đồ được sử dụng bởi một trong hai công cụ này.

Lưu ý rằng các công cụ bên thứ 3 khác nhau cũng tồn tại cho việc này.


3

Bạn có thể sử dụng xsd theo đề xuất của Darin.

Ngoài ra, nên chỉnh sửa tệp test.xsd để tạo một lược đồ hợp lý hơn.

type="xs:string"có thể được thay đổi thành type="xs:int"giá trị số nguyên
minOccurs="0"có thể được thay đổi thành minOccurs="1"nơi yêu cầu trường
maxOccurs="unbounded"có thể được thay đổi thành maxOccurs="1"nơi chỉ cho phép một mục

Bạn có thể tạo xsd-s nâng cao hơn nếu bạn muốn xác thực dữ liệu của mình hơn nữa, nhưng điều này ít nhất sẽ cung cấp cho bạn các loại dữ liệu hợp lý trong c # được tạo.


1

Sử dụng cú pháp dưới đây để tạo lớp lược đồ từ tệp XSD.

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

0

Để chuyển đổi XML thành Lớp C #:

  • Điều hướng đến Thị trường Microsoft Visual Studio: - https://marketplace.visualstudio.com
  • Trong thanh tìm kiếm, nhập văn bản: - xml vào công cụ mã lớp
  • Tải xuống, cài đặt và sử dụng ứng dụng

Lưu ý: trong thời gian đầy đủ, ứng dụng này có thể được thay thế, nhưng rất có thể, sẽ có một công cụ khác thực hiện điều tương tự.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.