XMLファイルからC#クラスを生成できますか?
はい、 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ジェネレータにバグがありますが、 回避策があります 。
VS 2012(またはそれ以降)で.NET 4.5プロジェクトに取り組んでいる場合は、特殊貼り付け XMLファイルをクラスとして使用できます。
EDIT > Paste Special > Paste XML As Classes
を選択します最初、私は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; }
これはかなり古い投稿であり、あなたはおそらく先に進んだと思います。
しかし、私はあなたと同じ問題を抱えていたので、私は私自身のプログラムを書くことにしました。
私にとっての "xml - > xsd - > classes"ルートの問題は、それが完全に維持できないコードの塊を生成しただけで、それを芝生にしてしまうことでした。
それは決してエレガントではありませんが、それは私のために仕事をしました。
あなたはここでそれを得ることができます:あなたがそれを好めば提案をしてください。
Svcutil( svcutil question )を考慮する必要があります
Xsd.exeとsvcutilはどちらもXMLスキーマファイル(.xsd)を操作します。 XMLは、これら2つのツールのいずれかによって使用されるスキーマファイルに準拠している必要があります。
これにはさまざまなサードパーティ製ツールも存在することに注意してください。
Darinが提案しているようにxsdを使うことができます。
それに加えて、より合理的なスキーマを作成するためにtest.xsdファイルを編集することをお勧めします。
整数値の場合はtype="xs:string"
をtype="xs:int"
に変更できますminOccurs="0"
は、フィールドが必須の場合はminOccurs="1"
に変更できますmaxOccurs="unbounded"
はmaxOccurs="1"
に変更できます。ここでは1つの項目のみが許可されます
データをさらに検証する必要がある場合は、より高度なxsd-sを作成できますが、少なくとも生成されたc#で妥当なデータ型が得られます。
以下の構文を使用してXSDファイルからスキーマクラスを作成します。
C:\xsd C:\Test\test-Schema.xsd /classes /language:cs /out:C:\Test\
XMLをC#クラスに変換するには
注:時間がたっぷりと、このアプリは置き換えられるかもしれませんが、チャンスは、同じことをする別のツールがあるでしょう。