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
使用xsdするには、ツールメニューでVS2013の開発者コマンドプロンプトを実行します。
ジェス14

13
xsd.exe以下で見つけることができます:C:\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 '31

413

VS 2012以降の.NET 4.5プロジェクトで作業している場合は、XMLファイルをクラスとして特別に貼り付けることができます。

  1. XMLファイルのコンテンツをクリップボードにコピーする
  2. エディターで、クラスを貼り付ける場所を選択します
  3. メニューから、 EDIT > Paste Special > Paste XML As Classes

22
「JSONをクラスとして貼り付け」の場合のように、この生成された自動実装プロパティが欲しいです。現在、これは6倍の肥大化したコード結果を意味し、これは非常に読みにくいです。これだけでは、残念ながら別のツールを探す必要があります。
ニコラスピーターセン

1
これはVS 2013から除外されましたか?
ロジャー、

3
@ロジャー私はVS 2013を使用していませんが、この機能はあるはずです。プロジェクトが.NET 4.5 Frameworkをターゲットにしていることを確認してください
miszczu

2
これはよりもはるかに高速ですxsdが、出力はほぼ同じです。
ジェス14

4
リシャーパーがない場合は、regex replace 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

最初、私はペーストスペシャルが聖杯だと思っていました!しかし、それを試してみたところ、インディアナジョーンズの映画のように髪が白くなりました。

しかし、今は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 2016

4
@D。カーモット、ウェブサイトのリンクに感謝します、私はそれをざっと見ました、そしてそれは特別な貼り付けよりもはるかに良い仕事をしているようです、コードはよりきれいに見えますが、私のテストXMLはより多くのクラスを作成しましたが、使いやすいです。
Harag

残念ながら、クラスの順序が逆になっているようです(最後にリストされている要素の外)
サベージ

22

これはかなり古い投稿だと思います。おそらく先に進んでいるはずです。

しかし、私はあなたと同じ問題を抱えていたので、私は自分のプログラムを書くことにしました。

私にとって「xml-> xsd-> classes」ルートの問題は、完全に保守不能なコードの塊を生成するだけで、結局それを混乱させてしまうことでした。

それは決してエレガントではありませんが、それは私のために仕事をしました。

あなたはそれをここで得ることができます:それが好きなら提案してください。

SimpleXmlToCode


1
間違ったコードが生成されます:// ELEMENTS [XmlIgnore] public DateTime Value {get; セットする; } [XmlText] public string ValueString {get {return Value?"真/偽"; }セット{値=値== "true"; }}
アンドレフィドラー2014

そして、コンストラクタは不要です+あなたは公開さメンバーのコメントを含めるべきである
アンドレ・フィードラー

1
私の弁護において、それは私にとって非常に迅速に一緒に叩かれたものであり、私のために働いた。私は戻ってはいませんが、変更があればリポジトリに貢献してください。
Talon

私はこれを数ヶ月使用しています-完璧ではありませんが、それは非常に有用であり、VS2013のXMLとしての貼り付けよりもはるかに読みやすく/単純なXMLを生成します。タロンに感謝します。
codechinchilla 14

6

svcutil(svcutilの質問を検討する必要があります

xsd.exeとsvcutilはどちらもXMLスキーマファイル(.xsd)を操作します。XMLは、これら2つのツールのいずれかで使用されるスキーマファイルに準拠している必要があります。

これには、さまざまなサードパーティツールも存在することに注意してください。


3

Darinの提案に従って、xsdを使用できます。

さらに、test.xsd-fileを編集して、より妥当なスキーマを作成することをお勧めします。

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#クラスに変換するには:

  • Microsoft Visual Studio Marketplaceに移動します。- //marketplace.visualstudio.com
  • 検索バーに次のテキストを入力します。-xml to class codeツール
  • アプリをダウンロード、インストール、使用する

注:満杯になると、このアプリは置き換えられる可能性がありますが、可能性としては、同じことを行う別のツールがあるでしょう。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.