問題タブ [ixmlserializable]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
3549 参照

c# - XmlTypeAttributeを持つ生成されたクラスにIXmlSerializableを実装する

基本的に、最初の問題は、ブール値を0または1としてシリアル化する必要があることです。私が見つけた解決策は、IXmlSerializableを実装することでした。残念ながら、私がシリアル化しようとしているクラスは、スキーマから生成されたコードであり、XmlTypeAttributeが含まれています。通常の方法で作成されたXmlSerializerを使用してオブジェクトを(逆)シリアル化しようとすると(new XmlSerializer(type))、次の例外がスローされます。

System.InvalidOperationException: Only XmlRoot attribute may be specified for the type ______ Please use XmlSchemaProviderAttribute to specify schema type.

2つのオプションがすぐに思い浮かびます。

1)生成されたコードの属性を削除します。この変更は、コードが再生成されるたびに行う必要があります。

2)シリアライザーを作成するときにXmlAttributeOverridesオブジェクトを使用して、属性を削除します。これには、コードベースの残りの部分がその属性をオーバーライドする必要があることを「知る」必要があります。また、スローされた例外は、それを修正するために何をする必要があるかについての手がかりをまったく与えません。

どちらのオプションもちょっと悪臭を放ちます。3番目のオプションはありますか?

0 投票する
1 に答える
723 参照

.net - 特定のタイプのフィールドでカスタム Xml シリアライゼーション/デシリアライゼーションを許可する問題

私は .net で Xml シリアライゼーション/デシリアライゼーションを扱ってきましたが、シリアライゼーション/デシリアライゼーション プロセスが Xml フラグメントの特定の部分にのみ適用される方法が必要でした。これは、逆シリアル化プロセスの後、フラグメントの特定の部分を Xml に保持できるようにするためです。

これを行うには、IXmlSerializable を実装する新しいクラス (XmlLiteral) を作成し、IXmlSerializable.ReadXml および IXmlSerializable.WriteXml メソッドを処理するための特定のコードを作成するのが最善であると考えました。

以下の私の例では、これはシリアル化に対して機能しますが、逆シリアル化プロセス中に、XmlLiteral クラスの複数回の使用に対して実行に失敗します。以下の私の例では、sTest1 は正しく入力されますが、sTest2 と sTest3 は空です。

次の行で間違っているに違いないと思いますが、理由がわかりません..何かアイデアはありますか?

完全なリスト:

0 投票する
1 に答える
301 参照

xml - WCF 操作で異なる戻り XML

私は国際的な HTTP 標準に合わせてサービスを作成しています。単一、複数、およびエラーと呼ばれる 3 つの異なる XML 結果を返すことができるメソッドが 1 つあります。これで、これらの各結果を使用して生成できる IXmlSerializable クラスを作成しました。ただし、WCF は、単一の戻り XML ルート名しか持てないと主張しているようです。Single、Multiple、または Errorのいずれかのカスタム オブジェクトの XmlRoot を選択する必要があります。

実行時にルートを選択できるように WCF を設定するにはどうすればよいですか?

これは私が現在持っているものです。

ItemCollection は IXmlSerializable を実装し、どの戻り値を書き込むかを選択できますが、ItemCollection クラスの XmlRoot 属性により、ルート XML ノードは常に複数になります。

0 投票する
1 に答える
529 参照

c# - IXmlSerializable クラスで XML 構成ファイルを表す

私は C# で書いていて、IXmlSerializableクラスを介して XML 構成ファイルを表現しようとしています。ただし、次のような、構成ファイルでネストされた要素を表す方法がわかりませんlogLevel

タグLogLevelのすべての可能な値を表す列挙型が呼び出されます。logLevel内のタグcredentialsはすべて文字列として出力されます。と呼ばれる私のクラスでDLLConfigFileは、次のものがありました。

<logLevel>ただし、 XML ファイルのルート ノード内にないため、これは機能しません<logging>。どうすればこれを行うことができますか?

ノードに関しては、次のようなプロパティを持つ<credentials>2 番目のクラスが必要になると思います。CredentialsSection

編集: さて、Robert Loveの提案を試して、LoggingSectionクラスを作成しました。ただし、私のテストは失敗します:

私がテストしている設定ファイルには間違いなく<logging>. クラスは次のようになります。

0 投票する
1 に答える
417 参照

ado.net - Windows Search が Authors プロパティの文字列配列を返すため、DataTable の XML を書き込めません

System.AuthorWindows プロパティは、複数値の文字列です。Windows Searchは、こ​​の値を DataColumn の文字列の配列として返します。(列のデータ型はstring[]orString()です。)結果のデータ テーブルでメソッドを呼び出すとWriteXML、次のInvalidOperationException例外が発生します。

特定の列または特定のデータ型に使用するデータ テーブルの xml-serializer を指定する方法はありますか?

WriteXML基本的に、このデータテーブルをどのように扱うことができますか?

System.InvalidOperationException: Type System.String[] は IXmlSerializable インターフェイスを実装していないため、シリアル化を続行できません。

0 投票する
1 に答える
8389 参照

.net - 複雑なオブジェクトグラフでIXmlSerializableインターフェイスを使用する

カスタムXMLシリアル化( )を使用する場合、カスタムインターフェイスを使用しないIXmlSerialiable構成要素の複合オブジェクトを持つプロパティを含む複合オブジェクトで、メソッドで、デシリアライザーがそれらの子プロパティで通常の逆シリアル化を使用するように指定するにはどうすればよいですか?IXmlSerializableIXmlSerializable.ReadXml(XmlReader reader)

注:この質問に似ています

0 投票する
1 に答える
2472 参照

c# - 'Key' /'Value'ノードのないC#のIXmlSerializableディクショナリ

C#で辞書をシリアル化しようとしています。私が見つけたすべて 例は、次のようなXMLを作成します。

さまざまで、ArrayOfEntriesノードが不要な場合もありますが、辞書のキーと値のペアの規則的なパターンが独自のノードに格納されているのがわかります。私が欲しいのは次のようなものです:

私は以前にこれを作成ReadXmlWriteXmlて実行しましたが、単一の辞書で機能しますが、シリアル化可能なList<T>辞書インスタンスのをシリアル化および逆シリアル化しようとすると、逆シリアル化されたリストには最後のシリアル化可能な辞書のみが含まれます。いつ停止するかわからないように、読み取りまたは書き込みメソッドについて何かが貪欲でなければならないと思います。シリアル化可能な辞書のシリアル化には現在機能しない私のシリアル化可能な辞書メソッドはList次のとおりです。

そしてReadXml

他のチュートリアルと私が行っていることとの違いに気付いたのは、多くの人がXmlSerializerオブジェクトのシリアル化と逆シリアルReadXml化に使用しているのWriteXmlに対し、私はなどを使用WriteElementStringしていることです。

私の質問は、そのXMLが上記の2番目のXMLの例のようになるように辞書をシリアル化するにはどうすればよいですか?ただし、シリアル化と逆シリアル化List<MySerializableDictionary>も機能しますか?「なぜあなたは何とかしているのか、それはそれを面白くするかもしれない」というヒントでさえ助けになるでしょう。

0 投票する
1 に答える
5532 参照

c# - シリアル化:クラス名を変更せずにルートノードの名前を変更します

ゴール

「Item」という名前のクラスを取得し、そのシリアル化されたXMLを次のように出力します。

問題

ルートノードは、IXmlSerializableを実装しているクラス名から派生しています。

だから私は次のようなXMLになります

質問

属性、オーバーライドできるプロパティ、または(クラス名の変更以外に)目的の効果を得るための何かがありますか?

ありがとう!

フレデリクのおかげで解決!

@Frederik Gheyselsの回答に対する私のコメントで質問が答えられているので、埋もれないようにここに置くと思いました。

クラスにXmlRoot属性を追加するだけで、ルートノードの出力xmlが変更されます。

例:

0 投票する
1 に答える
112 参照

.net - IXMLSerializeable

2 つのメンバーのカスタム シリアル化のために IXMLSerializeable を実装する必要がありますが、残りのメンバーを既定のシリアル化でシリアル化する必要があります。または、少なくとも、他のメンバーで標準のシリアル化を呼び出す方法はありますか? 他のメンバーの型は非常に大きく、深く根付いたクラスであり、すべてのメンバーのシリアル化をチェーン全体で定義するのは実際的ではありません。

0 投票する
1 に答える
214 参照

.net - IXmlSerializable を使用すると、base64 のサイズの膨張をどのように回避できますか?

MSDNから:

このインターフェイスを実装する理由は 2 つあります。1 つ目は、オブジェクトが XmlSerializer によってシリアル化または逆シリアル化される方法を制御することです。たとえば、大きなデータ セットをバッファリングする代わりに、データをバイトにチャンクできます。また、Base64 エンコーディングを使用してデータをエンコードするときに発生するインフレーションも回避できます。

IXmlSerializable を実装すると、base64 のサイズの膨張をどのように回避できますか?

つまり、IXmlSerializable を実装し、バイト配列を XmlWriter に書き込みたいとします。私が知る限り、それを行うための最もインフレの少ない方法はXmlWriter.WriteBase64です-データを直接書き込むことができないため-XMLでは無効なバイトが含まれます。