問題タブ [xmlserializer]
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# - XmlSerializer が使いにくいのはなぜですか?
次のような XML シリアライゼーションを使用することを想像します。
編集:このコードが間違っていることはわかっています。自分がどのように使いたいかを表示するだけでした。
しかし、これはまったく機能しません:
- XmlSerializer はジェネリックではありません。(デ) シリアライゼーションのオブジェクトからキャストする必要があります。
- すべてのプロパティは完全に公開する必要があります。プライベート セッターへのアクセスに Reflection を使用しないのはなぜですか?
- プライベート フィールドはシリアル化できません。プライベート フィールドを属性で装飾して、XmlSerializer に含めるようにしたいと思います。
XmlSerializer は実際に記述された可能性を提供していますか? これらのケースをより洗練された方法で処理する XML への代替シリアライザーはありますか?
そうでない場合: 結局のところ、現在は 2010 年であり、.NET は何年も前から存在しています。XML シリアライゼーションがよく使用されますが、これは完全に標準であり、非常に簡単に実行できるはずです。それとも、私の理解が間違っている可能性があり、XMLシリアライゼーションは正当な理由で説明されている機能を公開すべきではありませんか?
編集:レガシーは正当な理由ではありません。List
も最初は一般的ではありませんでした。
(キャプションやタグは自由に調整してください。これが CW である必要がある場合は、メモを残してください。)
c# - XmlSerializer および OnSerializing/OnSerialized の代替手段
多くの場合、他の複雑なオブジェクトのコレクションを持つさまざまな複雑なオブジェクトがあります。必要なときにのみコレクションをロードしたい場合があるため、コレクションがロードされたかどうかを追跡する方法が必要です (null/empty は、必ずしもロードされていないことを意味しません)。これを行うために、これらの複雑なオブジェクトは、読み込まれたコレクションのコレクションを保持するクラスから継承します。次に、追跡したいコレクションごとにセッターに関数の呼び出しを追加する必要があります。
PropertyLoaded 関数は、読み込まれたコレクションを追跡するコレクションを更新します。
残念ながら、これらのオブジェクトは Web サービスで使用されるため、(デ) シリアル化され、すべてのセッターが呼び出され、PropertyLoaded が実際には呼び出されていないときに呼び出されます。
理想的には、OnSerializing/OnSerialized を使用できるようにして、関数が正当に呼び出されているかどうかを認識できるようにしたいのですが、XmlSerializer を使用しているため、これは機能しません。DataContractSerializer を使用するように変更したいのですが、さまざまな理由で現時点では変更できません。
シリアル化が行われているかどうかを知る他の方法はありますか? そうでない場合、または代わりに、新しいコレクションを追跡する必要があるたびに追加のコードを作成することなく、上記を達成するためのより良い方法はありますか?
c# - IExtensibleDataObjectと同等のXmlSerializer
DataContractsを使用すると、IExtensibleDataObjectから派生して、XMLファイルから不明な追加データを失うことなくラウンドトリップを機能させることができます。
出力XMLのフォーマットを制御する必要があるため、DataContractを使用できません。ただし、XMLファイルからデータを失うことなく、古いバージョンのアプリで将来のバージョンのXMLファイルを読み取ることができる必要もあります。
例えば
XML v1:
XML v2:
アプリのv1からXMLv2ファイルを読み取る場合は、逆シリアル化して再度シリアル化すると、XMLv1ファイルになります。つまり、「年齢」フィールドが消去されます。
年齢フィールドが消えないようにするためにXmlSerializerで使用できるIExtensibleDataObjectに似たものはありますか?
c# - XMlSerializationは日時をシリアル化していない
を含むオブジェクトをシリアル化するDateTime
と、XML文字列で空が返されます。
私のXSD、XSDから生成されたシリアル化可能なクラス、およびXSDのシリアル化を処理するシリアル化ヘルパークラスについては、以下を参照してください。
XSD:
シリアライザー:
シリアル化可能なクラス
DateTime
値が空の文字列にシリアル化されるのはなぜですか?
c# - XmlSerializer (c#) レポート タイプを反映するエラーが発生しました (タイプ = リスト)
誰でも助けることができますか?
オブジェクトをデータセットに変換する方法があります。この場合、オブジェクトはコレクション クラスのコレクション (LIST を使用) です。
コードは次のとおりですが、 XmlSerializer formatter= ... の行で次のエラーが発生します。
これがエラーです
タイプ 'System.Collections.Generic.List`1[MyNameSpace.Model.InformeVehiculo]' を反映するエラーがありました。
私はそのようにメソッドを呼び出しています
objColeccionInformeVehiculo はリストです
私は少し迷っています。なぜ失敗したのか誰か知っていますか
編集
InnerExeption をさらに調べた後、最後のものには次のように表示されます
実際に InformeVehiculo 内で、InformeContracto への参照を保持するように拡張しました (部分クラスを使用して、エンティティ フレームワークによって最初に作成されたモデルです)。
InformeContrato は、失敗した場所です。
この私のクラス
InformeContrato は、エンティティ フレームワークによって作成された部分クラスとして存在した InformeVehiculo とは異なり、存在しませんでした。そこで、InformeContrato を手動で作成し、changeTracking のものを挿入しました。
さらに下には、Entity Framework によって作成されたモデルからコピーした領域があります。
web-services - XmlSerializer.Deserializeメソッドは、時刻と日時のフィールドにタイムゾーンを追加します
Microsoft.NET 2.0に、XMLを型付きオブジェクトに逆シリアル化し、ServiceDescriptionを使用して動的にWebサービスに接続し、逆シリアル化された型付きオブジェクトをWebMethodインバウンドにバインドする小さなスクリプトを用意します。シリアル化前のXMLは次のようになります
Webサービスと通信するときのネットワーク上は以下のようになります
タイムゾーンが最後に追加されます。これにより、異なるタイムゾーンでWebサービスと通信するときに、時刻の読み取りが異なります。XmlSerializerにタイムゾーンをスキップさせる方法はありますか?または他の既知の回避策はありますか?
c# - シリアル化されるプロパティの変更
私はすでにこれに対する答えを知っていると思いますが、それを明確に述べているものは何も見つからないため、私の質問です-トリックを見逃していないことを確認したい.
DataContractSerializer または XmlSerializer を使用して、pulic プロパティがシリアル化されるものを変更する方法はありますか? であるプロパティがあり、その値のテキスト表現ではなく、ネットワークを介してその値が送信されるように、Enum
それを としてシリアル化したいと考えています。int
属性を使用してこれを行うことは可能ですか、それとも独自のシリアライザーを作成する必要がありますか?
ありがとう :)
c# - 基本クラスから派生したクラスでの XmlSerializer コンストラクター エラー
次のコードは、基本クラス「TestBase」から派生したタイプ「MyBase64Binary」を指定します
このような XmlSerializer を作成しようとすると
これから、InvalidOperationException エラーが発生します。
そして、内部例外は次のことを教えてくれます:
「TestBase」クラスから派生していない場合、すべて正常に動作します。
解決策がわかりません。助けてください。
どうしたの?
ドイツからのご
挨拶
.net - 方法: xsd ファイルから機械生成されたクラスを元のネストされた状態に再アセンブルする
c# を使用して Visual Studio 2008 で作業しています。
「Envelope.xsd」と「Body.xsd」など、2 つの xsd ファイルがあるとします。
xsd.exe を実行して 2 セットのクラスを作成し、"Envelope.cs" と "Body.cs" のようなものを作成します。
2 つのクラスをリンクして (XmlSerializer を使用して) 適切なネストされた xml にシリアル化する方法がわかりません。
私が欲しい:
<Envelope><DocumentTitle>Title</DocumentTitle><Body>Body Info</Body></Envelope>
しかし、私は得る:
<Envelope><DocumentTitle>Title</DocumentTitle></Envelope><Body>Body Info</Body>
XmlSerializer が目的のネストされた結果を実行できるようにするために、2 つの .cs クラスがどのように見えるべきかを誰かが教えてくれませんか?
どうもありがとう
ポール
wcf - WCF カスタム WSDL XmlSerializerOperationBehavior
その場でカスタム WCF wsdl をビルドするコードがあります。1 つの特定のシナリオでは、エクスポートされる WSDL は、デフォルトの DataContractSerializerOperationBehavior IWsdlExportExtension ではなく、XmlSerializerOperationBehavior を IWsdlExportExtension として使用する必要があります。
ただし、WSDL 生成コードからこれを試みるたびに、XmlSerializerMessageContractExporter の ExportBody メソッド (XmlSerializerOperationBehavior ExportContract メソッドによって System.ServiceModel で内部的に使用される) から null 参照例外が発生します。私はそれを反射させましたが、明らかに間違っているものは何も見えません。何らかの理由で、.NET もこのシナリオでソースのステッピングを使用したくありません...
簡単に言えば、これを再現できる最も基本的な方法は
誰かがこれについて何か考えを持っていますか?
どうもありがとう。