問題タブ [xml-serialization]
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.
c# - XML シリアル化と継承された型
以前の質問に続いて、オブジェクト モデルを XML にシリアル化する作業を続けています。しかし、私は今問題に遭遇しました (quelle 驚き!)。
私が抱えている問題は、具体的な派生型によって設定された抽象基本クラス型のコレクションがあることです。
関連するすべてのクラスに XML 属性を追加するだけで十分だと思いました。悲しいことに、そうではありません!
だから私はグーグルで掘り下げましたが、なぜそれが機能していないのか理解しました. 実際、はXmlSerializer
XML との間でオブジェクトをシリアル化するために巧妙なリフレクションを行っていますが、抽象型に基づいているため、一体何と話しているのかを理解できません。罰金。
私はCodeProject でこのページに出くわしましたが、これは大いに役立つように見えます (まだ完全に読んだり消費したりしていません)。これを可能な限り迅速/軽量な方法で起動して実行するためのハック/トリック。
また、追加しなければならないことの 1 つは、ルートをたどりたくないということです。XmlInclude
それとの結合が多すぎるだけでなく、システムのこの領域は大規模な開発が行われているため、メンテナンスの頭痛の種になるでしょう!
c# - .NET XMLシリアル化の落とし穴?
共有したいと思っていたC#XMLシリアル化を行うときに、いくつかの落とし穴に遭遇しました。
- 読み取り専用のアイテム(KeyValuePairsなど)をシリアル化することはできません
- 一般的な辞書をシリアル化することはできません。代わりに、次のラッパークラスを試してください(http://weblogs.asp.net/pwelter34/archive/2006/05/03/444961.aspxから):
他にXMLシリアル化の落とし穴はありますか?
c# - XMLシリアル化と空のコレクション
私は次のように定義されたプロパティを持っています:
List<>Deleteにアイテムがない場合
放出されます。List<>Deleteがnullに設定されている場合
放出されます。コレクションにアイテムがない場合に、属性を使用して削除要素が発行されないようにする方法はありますか?
グレッグ-完全に感謝します。IsNullableのドキュメントを読んでいませんでした。
Rob Cooper -ISerializableを避けようとしていましたが、Gregsの提案は機能します。(1)で概説した問題に遭遇しました。コレクションの長さがゼロの場合、nullを返すだけで、大量のコードを壊しました。これを回避するために、EventsBuilderクラス(シリアル化するクラスはEventsと呼ばれます)を作成しました。このクラスは、Eventsクラスをシリアル化のために吐き出すEventsクラスの基になるオブジェクトのすべてのライフタイム/作成を管理します。
.net - .NET XML シリアル化
XML へのシリアル化に使用される一連のクラスに取り組んでいます。XML は私が管理しているものではなく、かなりうまく構成されています。残念ながら、ネストされたノードのセットがいくつかあります。それらのいくつかの目的は、子のコレクションを保持することだけです。XML シリアライゼーションに関する私の現在の知識に基づくと、これらのノードには別のクラスが必要です。
クラスを 1 つだけではなく一連の XML ノードにシリアル化する方法はありますか。泥のようにはっきりしているように感じるので、xml があるとします。
理想的には、3クラスが最適です。オブジェクトroot
のコレクションをuser
持つクラス。group
ただし、私が理解できる最善の方法は、 、 、 、および のクラスが必要でありroot
、users
およびuser
にgroups
はgroup
それぞれusers
およびのコレクションgroups
のみが含まれ、 およびオブジェクトが含まれているということです。user
group
root
users
groups
私よりよく知っている人はいますか?(嘘をつかないでください、私はあることを知っています)。
xml - 手っ取り早い XML シリアライゼーション用の Ruby コード?
適度に複雑な XML 構造 (数十の要素、数百の属性) があり、XSD がなく、オブジェクト モデルを作成したい場合、ボイラープレートの from_xml() および to_xml() メソッドを作成しないようにするためのエレガントな方法は何ですか?
たとえば、次のようになります。
次のエンドレス シーケンスを記述しないようにするにはどうすればよいですか。
オブジェクト構造を明示的に作成しても構いません。高レベルのプログラミングで処理できると確信しているのはシリアライゼーションです...
クラスごとに1行または2行を節約しようとはしていません(from_xmlの動作を初期化子またはクラスメソッドなどに移動することにより)。私の精神的プロセスを複製する「メタ」ソリューションを探しています。
「すべての要素がクラス名になることはわかっています。すべての XML 属性はフィールド名になることもわかっています。割り当てるコードは @#{attribute_name} = el.[#{attribute_name} ] そして、サブ要素に再帰します。そして、to_xml を逆にします。"
「ビルダー」クラスと XmlSimple が正しい道のように思われるという提案に同意します。XML -> ハッシュ -> ? -> オブジェクト モデル (そして利益!)
更新 2008-09-18 AM: @Roman、@fatgeekuk、@ScottKoon からの優れた提案により、問題が解決したようです。HPricot のソースをダウンロードして、問題がどのように解決されたかを確認しました。重要なメソッドは明らかに instance_variable_set と class_eval です。irb の作業は非常に心強いものであり、現在実装に向けて動いています....非常に興奮しています
c# - XML を C# オブジェクトにマップする方法
オブジェクトにロードし、それらのオブジェクトを操作 (値の設定、値の読み取り) してから、それらの XML を保存したい XML があります。作成した構造 (xsd) に XML を含めることが重要です。
それを行う 1 つの方法は、独自のシリアライザーを作成することですが、それをサポートする組み込みのサポートや、使用できる C# のオープン ソースはありますか?
php - XML との間で PHP 連想配列を渡す
PHP連想配列をXMLとの間でマーシャリングする簡単な方法はありますか? たとえば、次の配列があります。
できるだけ少ない行で次の XML に似たものに変換してから、もう一度元に戻すにはどうすればよいでしょうか?
配列構造を少し変更する必要があるかどうか、または出力される XML が上記の例と異なるかどうかはあまり気にしません。私は PHP のXMLReaderとXMLWriterを操作しようとしましたが、ドキュメントが貧弱で、結果として生成したコードは、私が本来あるべきだと思っているものとはまったく異なります。
独自のカスタム クラスを作成せずに、PHP 配列の基本的な生の XML ダンプを取得するのは、それよりも難しいことでしょうか?
私はPEARを避けようとしています。私が抱えていた構成の頭痛に加えて、私はこれまでに使用したパッケージのどれにも固執したことはありません.
.net - ミリ秒とgmtを使用せずにDateTimeを時間にシリアル化する
XSDファイルを入力として使用してC#クラスファイルを作成しました。私のプロパティの1つは次のようになります。
シリアル化すると、ファイルの内容は次のようになります。
プロパティにXmlAttributesを使用して、ミリ秒とGMT値なしでこのようにレンダリングすることは可能ですか?
これは可能ですか、それともクラスがシリアル化された後、ある種のxsl / xpath-replace-magicを一緒にハックする必要がありますか?
オブジェクトをStringに変更するソリューションではありません。これは、アプリケーションの残りの部分でDateTimeのように使用され、XmlSerializer.Serialize()メソッドを使用してオブジェクトからxml表現を作成できるためです。
フィールドから余分な情報を削除する必要がある理由は、受信システムが時間データ型のw3c標準に準拠していないためです。
c# - 列挙値を強制的に整数にシリアライズできますか?
こんにちは、みんな!
文字列表現ではなく、列挙値を強制的に整数値にシリアル化する方法があるかどうか疑問に思っています。
コンテキストを説明すると、Web サービスに大きく依存する Web アプリケーションで、要求の種類に関係なく、すべての要求ヘッダーに対して単一の基本クラスを使用しています。
ヘッダーに Result フィールドを追加したいので、Web サービス側で操作がどのように行われたかについて、呼び出し元のアプリにヒントを返す場所が必要です。その趣旨で宣言された列挙型は既にありますが、これらの列挙型を認識しない可能性のある Web サービスを呼び出すレガシー アプリがあるため、それらの値を整数としてシリアル化して送信したいと思います。
[XmlElement(ElementName = "stringrepresentationOfAttributeName")] を使用してこれらのヘッダーの長さを削減する必要があったのは、時折 IE の最大 URL の長さを超えたためです。値を整数に列挙します。
そのような属性について聞いたことがありますか?
いつものように、助けてくれてありがとう、パスカル
c# - XML ファイルを読み取り専用プロパティを持つクラスに逆シリアル化するにはどうすればよいですか?
管理者がアプリケーションの設定を変更するために編集できる XML ファイルにシリアル化される設定クラスとして使用しているクラスがあります。(設定は、許可されているよりも少し複雑App.config
です。)
クラスを使用しXmlSerializer
て XML ファイルを逆シリアル化し、プロパティ クラスを設定できるようにしたいのですが、クラス/アセンブリを使用する他の開発者がコードを介してプロパティを設定/変更できるようにしたくありません。XmlSerializer クラスでこれを実現できますか?
さらにいくつかの詳細を追加するには: この特定のクラスは Collection であり、FxCop によると、このクラスはXmlSerializer
読み取り専用コレクションの逆シリアル化を特別にサポートしていますが、これ以上の情報を見つけることができませんでした。これが違反するルールの正確な詳細は次のとおりです。
ユーザーがバッキング ストアを完全に置き換えることができないように、コレクションを返すプロパティは読み取り専用にする必要があります。ユーザーは、コレクションで関連するメソッドを呼び出すことにより、コレクションの内容を変更できます。XmlSerializer クラスは、読み取り専用コレクションの逆シリアル化を特別にサポートしていることに注意してください。詳細については、XmlSerializer の概要を参照してください。
これはまさに私が欲しいものですが、どうすればいいですか?
編集: OK、私はここで少し頭がおかしくなっていると思います。私の場合は、コンストラクターで Collection オブジェクトを初期化し、プロパティ セッターを削除するだけで済みました。次に、XmlSerializable オブジェクトは、Collection オブジェクトで Add/AddRange およびインデクサー プロパティを使用することを実際に認識します。以下は実際に動作します!