XML에서 C # 클래스 생성


답변:


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
사용하려면 도구 메뉴 에서 VS2013 개발자 명령 프롬프트를xsd 실행하십시오 .
Jess

13
xsd.exeC:\Program Files (x86)\Microsoft SDKs\Windows
Julian

7
복잡한 XML 파일이 너무 크면 생성 된 클래스가 너무 못 생겨 거의 사용할 수 없게 될 것입니다.)
Matthew Lock

3
나를 xsd.exe위해 발견되었습니다 : C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools
user1991179 1

414

VS 2012 이상에서 .NET 4.5 프로젝트를 작업하는 경우 XML 파일을 클래스로 특수 붙여 넣기 만하면 됩니다.

  1. XML 파일의 내용을 클립 보드에 복사
  2. 편집기에서 수업을 붙여 넣을 장소를 선택하십시오.
  3. 메뉴에서 EDIT > Paste Special > Paste XML As Classes

22
"JSON을 클래스로 붙여 넣기"에서와 같이 생성 된 자동 구현 속성을 원합니다. 현재 이것은 6 배의 부풀어 오른 코드 결과를 의미하며, 읽기가 훨씬 어렵습니다. 이것만으로도 불행히도 다른 도구를 찾을 수 있습니다.
Nicholas Petersen

1
VS 2013에서 제외 되었습니까?
Roger

3
내가 VS 2013를 사용하지만이 기능이 있어야한다고 생각하지 @Roger, 반드시 프로젝트 프레임 워크 .NET 4.5을 대상으로되어 있는지 확인
miszczu

2
이보다 훨씬 빠르지 xsd만 출력은 거의 같습니다.
Jess

4
resharper가없는 경우 정규식 바꾸기 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; }및`private \ w + \ w + Field; \ r \ n \ r \ n`을 사용하십시오.
AlexDev

44

처음에는 Paste Special이 성배라고 생각했습니다! 그러나 나는 그것을 시도했고 인디애나 존스 영화처럼 머리카락이 하얗게 변했습니다.

그러나 지금은 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
이 도구의 결과는 훌륭하지만이 사이트 (또는 그 문제에 대한 다른 자료)에 민감한 데이터를 제출하지 않도록주의를 기울이고 싶습니다. 제공되는 서비스에 감사하지만 개인 정보 보호 정책은 없으며 붙여
넣은 내용

2
나는 재귀 관계가있는 xml 파일을 가지고 있습니다 (아마도 순환 관계라고 불릴 수도 있습니다.) 다른 사람들은 실패했지만 xmltocsharp.azurewebsites.net 은 그 XML에서 매우 성공적이었습니다.
코레이

4
@ D.Kermott 웹 사이트 링크에 ​​감사드립니다. 빠른 살펴 보았고 붙여 넣기 스페셜보다 훨씬 더 잘 작동하는 것처럼 보입니다. 코드는 더 깨끗해 보입니다. 내 테스트 xml은 더 많은 클래스를 만들었지 만 훨씬 많았습니다. 사용하기 더 좋습니다.
Harag

안타깝게도 클래스의 순서를 뒤집는 것 같습니다 (마지막으로 나열된 외부 요소)
Savage

22

나는 이것이 다소 오래된 게시물이고 당신은 아마 계속 움직 였다는 것을 알고 있습니다.

그러나 나는 당신과 같은 문제가있어서 내 자신의 프로그램을 작성하기로 결정했습니다.

나를 위해 "xml-> xsd-> classes"라우트의 문제점은 완전히 유지 관리 할 수없는 코드를 방금 생성하여 결국 터프하게한다는 것입니다.

그것은 결코 우아하지 않지만 나를 위해 일을했습니다.

여기에서 얻을 수 있습니다 : 원하는 경우 제안하십시오.

SimpleXmlToCode


1
잘못된 코드를 생성합니다. // ELEMENTS [XmlIgnore] public DateTime Value {get; 세트; } [XmlText] 공개 문자열 ValueString {get {return Value? "허위 사실"; } set {Value = value == "true"; }}
André Fiedler

그리고 생성자는 불필요합니다. + 공개적으로 보이는 회원에 대한 의견을 포함해야합니다
André Fiedler

1
나의 방어에서 그것은 나를 위해 일했던 매우 빨리 함께 때렸다. 나는 그것으로 돌아 가지 않았지만 변경 사항에 자유롭게 repo에 기여하십시오.
Talon

나는 이것을 몇 달 동안 사용해 왔지만 완벽하지는 않지만 매우 유용하며 VS2013의 XML 붙여 넣기보다 훨씬 읽기 쉽고 간단한 XML을 생성한다는 것을 알았습니다. Talon에게 감사드립니다.
codechinchilla

6

svcutil을 고려해야합니다 ( svcutil question )

xsd.exe와 svcutil은 모두 XML 스키마 파일 (.xsd)에서 작동합니다. XML은이 두 도구 중 하나에서 사용할 스키마 파일을 준수해야합니다.

이를 위해 다양한 타사 도구도 있습니다.


3

Darin이 제안한대로 xsd를 사용할 수 있습니다.

또한 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 # 클래스로 변환하려면

참고 : 전체 시간 내에이 응용 프로그램은 교체 될 수 있지만 똑같은 일을하는 다른 도구가있을 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.