web-dev-qa-db-ja.com

XMLをC#オブジェクトにマップする方法

オブジェクトにロードし、それらのオブジェクトを操作(値の設定、値の読み取り)し、それらのXMLを保存したいXMLがあります。私が作成した構造(xsd)にXMLを含めることが重要です。

これを行う1つの方法は、独自のシリアライザーを作成することですが、それをサポートする組み込みのサポートや、C#で使用できるオープンソースはありますか?

28
Ragoler

Xsd.exeを使用して、スキーマ(xsd)からシリアル化可能なC#クラスを生成できます。

xsd.exe dependency1.xsd dependency2.xsd schema.xsd /out:outputDir

スキーマに依存関係(インクルード/インポートされたスキーマ)がある場合、それらはすべて同じコマンドラインに含める必要があります。

28
ckarras

このコード(C#DotNet 1.0以降)は、ほとんどのオブジェクトをXMLにシリアル化するのに非常によく機能します。 (およびその逆)ArrayListを含むオブジェクトでは機能せず、可能であれば配列のみを使用する

using System;    
using System.IO;
using System.Text;
using System.Xml.Serialization;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;


public static string Serialize(object objectToSerialize)
{
    MemoryStream mem = new MemoryStream();          
    XmlSerializer ser = new XmlSerializer(objectToSerialize.GetType());         
    ser.Serialize(mem, objectToSerialize);                      
    ASCIIEncoding ascii = new ASCIIEncoding();
    return ascii.GetString(mem.ToArray());
}        

public static object Deserialize(Type typeToDeserialize, string xmlString)
{
    byte[] bytes = Encoding.UTF8.GetBytes(xmlString);
    MemoryStream mem = new MemoryStream(bytes);         
    XmlSerializer ser = new XmlSerializer(typeToDeserialize);
    return ser.Deserialize(mem);
}
18
Poltergoose

LINQ to XML は、.net 3.5を使用している場合は非常に強力です LINQ to XSD も役に立ちます!

7
ljs

Visual Studioに付属するxsd.exeコマンドラインプログラムを使用して、プロジェクト/ソリューションで使用できるクラスファイルを作成し、System.Xml.Serialization名前空間(具体的には、XmlSerializerクラス)を使用して、これらのクラスのシリアル化/逆シリアル化を行いますディスク。

2
Joel Coehoorn

system.Xml.Serializationを使用します。この名前空間には、xmlを任意のランダムオブジェクトにマップする場合に必要なすべての属性があります。または、xsd.exeツールを使用することもできます

xsd file.xsd {/ classes |/dataset} [/ element:element] [/ language:language] [/ namespace:namespace] [/ outputdir:directory] ​​[URI:uri]は、xsdファイルを取得し、それらからc#またはvb.netクラスを作成します。

http://msdn.Microsoft.com/en-us/library/x6c1kb0s(VS.71).aspx

2
chris.w.mclean

XMLからC#クラスを自動生成できるフレームワークを作成しました。 XMLを渡すビジュアルアイテムテンプレートであり、クラスはプロジェクトで自動的に生成されます。これらのクラスを使用して、XMLを作成/読み取り/書き込みできます。

フレームワークとVisual C#アイテムテンプレートについては、このリンクを確認してください: ここをクリック

1
Savaratkar

microsoftのxsd.exeには多くのバグがあります:|このオープンソースの真珠をお試しください http://xsd2code.codeplex.com/

1
binball

Xsdは本当にくだらないことに同意します...しかし、彼らは誰も知らない別のバージョンを作りました。その呼び出されたxsdオブジェクトジェネレータ。その次のバージョンでは、さらに多くのオプションがあります。 XSDからファイルを生成し、素晴らしい働きをします。 XML spyのようなスキーマジェネレーターがある場合。 xmlからxsdを作成し、このツールを使用します。このツールを使用して、非常に複雑なクラスを作成しました。次に、追加のプロパティ\メソッドなどの部分クラスを作成します。スキーマを更新すると、クラスが再生成されるだけで、編集内容は部分クラスに残ります。

http://www.Microsoft.com/download/en/details.aspx?displaylang=en&id=7075

1
Steve Coleman

NetDataContractSerializerはあなたがやりたいことをできると思います。

0
dcstraw