0

C#を使用していて、XMLファイルをアプリケーションに逆シリアル化しようとしています。これは、複数のディレクトリからXMLファイルをプルするスレッド化されたプロセスであり、各ディレクトリには、お客様のニーズに基づいた特定のスキーマが含まれる場合があります。

私がやろうとしているのは、特定のディレクトリのスキーマを使用することです。デシリアライザーは、XMLファイルからアプリケーションのオブジェクトにデータをロードする必要があります。ただし、要素がXMLファイルで指定されていない場合は、スキーマからデフォルト値を取得するためにデシリアライザーが必要です。

[XmlSchemaProviderAttribute( "GetSchemaFile")]属性と静的メソッド(参照http://msdn.microsoft.com/en-us/magazine )を使用して、クラスのスキーマの場所を指定する方法があることがわかりました。 /cc300797.aspx)。ただし、異なるファイルに固有の複数のスキーマがあるため、これは現在の状況では機能しません。

誰かがこれを行う方法を知っていますか?または、デフォルトの必要性に対処する別の方法を見つけようとする必要がありますか?

4

2 に答える 2

1

各XMLファイルは、使用するスキーマを指定する必要があります。これは通常、ルート要素で行われます。

以下の例では、スキーマはXMLファイルと同じディレクトリにあります。明らかに、これは、スキーマが配置されている場所に応じて、XMLファイルに関連して変化します。ただし、要点は、XMLファイルを使用してスキーマを参照することです。次に、デフォルト値がXMLパーサーによって自動的に適用されます。

<node name="/org/freedesktop/sample_object" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:noNamespaceSchemaLocation="introspect.xsd">

スキーマを参照する方法の概要を示すリンクは次のとおりです。

于 2012-08-08T20:44:14.797 に答える
0

だから私はちょうどnoNamespaceSchemaLocationを使用するというあなたの提案@Davidをテストする機会がありました、そしてXmlSerializerはデフォルトのためにそこにリストされたスキーマから情報を引き出していないようです。私はこの仕事をする方法を見つけるために一日中探していました、それで私が投稿した理由。

* 編集 *

多くの異なるサイトを調べた後、スキーマを動的にする必要がある場合、C#XMLシリアライザー逆シリアル化メソッドを使用してスキーマからデフォルトをプルすることは不可能であることがわかりました。つまり、逆シリアル化されるオブジェクトは、スキーマごとに異なるデフォルトを持つ可能性があります。

私のソフトウェアがデフォルトを処理するためにこの問題を解決するために、現在の状況で機能するソリューションがあります。

提案してくれた@Davidに感謝します。彼らは大いに感謝しています。

于 2012-08-08T22:41:11.163 に答える