28

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

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

4

9 に答える 9

28

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

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

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

于 2008-09-17T21:03:24.187 に答える
18

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

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);
}
于 2008-09-17T21:45:27.957 に答える
7

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

于 2008-09-17T21:02:47.090 に答える
2

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

于 2008-09-17T21:03:00.977 に答える
2

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

xsd ファイル.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

于 2008-09-17T21:07:33.007 に答える
1

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

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

于 2012-01-19T22:11:20.163 に答える
1

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

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

于 2011-09-13T10:21:46.973 に答える
1

Microsoft の xsd.exe には多くのバグがあります :| このオープン ソース パールhttp://xsd2code.codeplex.com/を試してください。

于 2011-04-18T07:26:48.830 に答える
0

NetDataContractSerializer があなたのやりたいことができるに違いありません。

于 2008-09-17T21:02:19.247 に答える