8

XMLSerializer クラスでいくつかのことを行います。ほとんどの初心者と同様に、アプリの起動時にパフォーマンスの問題に直面しています。多くのブログや記事を読み、最終的に SGEN ツールを使用しています。現在、パフォーマンスは問題ないように見えますが、まだはっきりしていないことはほとんどありません。

1) 次のような SGEN 構文を使用する必要があります。

SGen.exe /assembly:MyAssembly /type:MyRootXmlType

または、次のようにするだけで十分です (現在、この構文を使用しています。アセンブリにはシリアライズ可能なクラスが 1 つしかありません)。

SGen.exe /assembly:MyAssembly

/type パラメータが実際に役立つのはいつですか?

2) MSDN を読みました ( http://msdn.microsoft.com/en-us/library/ee704594.aspx )

このコマンドは、シリアライザー アセンブリ MyAssembly.XmlSerializers.dll を生成します。これは、現在のプロジェクトまたは GAC への参照として追加する必要があります。

しかし、他のすべてのブログや記事 (SO など) では、MyAssembly.XmlSerializers.dll を MyAssembly が存在するフォルダーに入れるだけで十分だと読みました。

では、何が正しいのでしょうか。

3) .XmlSerilizers.dll を生成し、MyAssembly と一緒にデプロイするだけで十分ですか、それともコードに何かを追加する必要がありますか?

そうは思いませんが、コードを変更する必要がなく、「魔法」が自動的に発生することを確認したいと思います。

4

1 に答える 1

10

sgen.exe に /type 引数を使用しない場合、アセンブリ内のすべてのパブリック型に対して逆シリアル化コードが生成されます。[Serializable] 属性は XML シリアル化では使用されないことに注意してください。生成されたアセンブリを小さく保つために /type を使用してください。

参照を追加する必要はありません。Xml シリアル化は常に .XmlSerializers.dll アセンブリで Assembly.Load() を試行します。さらに、生成された XmlSerializationWriterXxx および XmlSerializationReaderXxx クラスをコードで直接参照することはありません。これには利点が 1 つあります。プロジェクトをソリューションに含めると、ビルド システムによってアセンブリが自動的にコピーされます。

GAC へのインストールは、さまざまなアプリが XML ファイルをシリアル化および逆シリアル化する場合にのみ検討する価値があります。.XmlSerializers.dll アセンブリを手動でコピーすることにより、他のアプリにアセンブリを提供することもできます。これは少しエラーが発生しやすいため、ここでは独自の判断を使用してください。コピーを自動化する方法については、前の段落を確認してください。

于 2010-03-30T12:44:08.920 に答える