問題タブ [netdatacontractserializer]
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# - NetDataContractSerializer とアセンブリのバージョンが一致しません
アプリケーション間でデータを交換するためにNetDataContractSerializerを使用しています。アセンブリのバージョンが一致しない場合、 ReadObjectメソッドが例外をスローするようにします。
たとえば、アセンブリ バージョン 1.0.0.0 からオブジェクトをシリアル化し、後で同じアセンブリを使用して逆シリアル化すると、現在はバージョン 1.0.0.1 であり、NetDataContractSerializerは問題なくストリームを飲み込んで逆シリアル化します。
バージョンが一致しない場合、逆シリアル化プロセスを中止することはできますか?
更新: 多くの理由により、バージョン不寛容が必要です。これは、顧客からの要件であると同時に、同じバージョンのアプリケーションからエクスポートされたファイルをインポートが処理することを確実にするための要件でもあります。私のアプリケーションの場合、バージョンを変更すると以前のインポート プロセスが役に立たなくなります。
c# - 破棄するかどうか破棄..ナビゲーターを介してXmlDocumentから作成されたライター?
私は本当に下の作家を処分する必要がありますか?
そうでない場合、コードは次のように簡略化されます。
c# - MVC 逆シリアル化エラー
わかった。これは私の会社の顧客ポータルで、MVC 2 プロジェクトです。ポータルがデータを取得するバックエンド SAP システムがあります。ただし、SAP に直接ヒットするわけではありません。VB アプリに xml 要求を送信し、データを取得して xml 応答で送り返します。、などIRequest
のさまざまなリクエスト実装の例をすべて実装するインターフェースがあります。これらはすべてメソッドを実装します。CustomerNumberRequest
CompanyNameRequest
ToXml
名前が示すように、送信する xml を構築するだけです。既存のリクエストはすべて正常に機能します。(私がこのプロジェクトを継承し、それを書いた人はもう私たちと一緒にいないことを前置きさせてください) 私は今、SAP から担当者グループを取得するための要求を送信しようとしています。基本的に、他のリクエストの 1 つをそのままコピーし、適切なリクエストを送信するために必要な調整を行いました。しかし、理解できないエラーメッセージで失敗し続けます:
メッセージを逆シリアル化しようとしているときにフォーマッタが例外をスローしました: パラメータ http://tempuri.org/:requestを逆シリアル化しようとしているときにエラーが発生しました。InnerException メッセージは、「タイプ 'XXXXX.CustomerPortal.Domain.RepGroupRequest' がアセンブリ 'XXXXX.CustomerPortal.Domain、バージョン = 1.0.0.0、カルチャ = ニュートラル、PublicKeyToken = null で見つからなかったため、デシリアライザーはデシリアライズするタイプを読み込めません」でした。 '。シリアル化されている型が、逆シリアル化されている型と同じコントラクトを持ち、同じアセンブリが使用されていることを確認してください。詳細については、InnerException を参照してください。
このエラーはすぐに発生します_communicationService.ProcessRequest(request);
(以下に表示)ここでProcessRequest
作成しようとしているメソッドには入りませんNetDataContractSerializer
:
そして死ぬ。呼び出されるメソッドは次のとおりです。
このエラーメッセージが私に何を伝えているのか、誰か教えてもらえますか? タイプが見つからないと言われていますが、タイプは IRequest である必要があります(これは、CreateSerializer
ヒットしたときに表示されるものです)。私は明らかに道に迷っています、助けてください!
.net - コードをリファクタリングした後のNetDataContractSerializerでの逆シリアル化の問題
NetDataContractSerializerを使用していくつかの.NETオブジェクトをシリアル化し、アプリケーション内でこれらのオブジェクトの状態を記憶する方法としてXMLをデータベースに保存している状況があります。最近、プロパティ名と型名のコードリファクタリングによって、このXMLデータの逆シリアル化に失敗した最初の状況に遭遇しました。
これまでのところ、NetDataContractSerializer自体で利用可能な機能を使用して逆シリアル化を制御するか、XMLを直接変換するなど、バージョンの互換性の侵害に対処する方法について、2つの異なる攻撃計画を考え出しました。私の実験と調査から、カスタムSerializationBinderを使用して別のタイプに逆シリアル化できるようですプロパティ名/タイプの変更は、ISerializableを実装するか、ISurrogateSelectorおよびISerializationSurrogateを実装してシリアル化サロゲートを作成することで対処できます。残念ながら、この優先メカニズムは機能していません。他の方法で表示できない限り、シリアル化されたデータのバージョン間を移動するサロゲートを使用しているように見えます。これは、Microsoftによる説明のつかない設計上の決定によるものです。Microsoftが提案したのは、両側で同じシリアル化を使用することです。これは、型名が変更されたり、別の名前空間またはアセンブリに移動されたりした場合に、サロゲートを使用する目的を完全に無効にします。
これを修正するには、同じNetDataContractSerializerインスタンス、または互換性のあるSurrogateSelectorで初期化された別のインスタンスを使用してください。
この説明は、シリアル化構造の他の変更に対処するとともに、カスタムバインダーを使用して型を置き換えることについて述べているMSDNの記事と矛盾します。
デシリアライズ中に、フォーマッタはバインダーが設定されていることを確認します。各オブジェクトが逆シリアル化されようとしているときに、フォーマッターはバインダーのBindToTypeメソッドを呼び出し、フォーマッターが逆シリアル化するアセンブリ名とタイプを渡します。この時点で、BindToTypeは実際に構築するタイプを決定し、このタイプを返します。
新しいタイプがSerializableカスタム属性を介した単純なシリアル化を使用する場合、元のタイプと新しいタイプはまったく同じフィールド名とタイプである必要があることに注意してください。ただし、新しいバージョンの型はISerializableインターフェイスを実装でき、その特別なコンストラクターが呼び出され、型はSerializationInfoオブジェクトの値を調べて、それ自体を逆シリアル化する方法を決定できます。
したがって、NetDataContractSerializerを機能させてV1 XMLをV2タイプに逆シリアル化できるようにするか、XMLを手動で変換する必要があります。誰かがNetDataContractSerializerのSerializationInfoがISerializableを使用するとき、またはMicrosoftが提供するものよりも優れているか、少なくともより良い説明を与えるシリアル化サロゲートを使用するときに実際に機能することを証明できれば、おそらく新しい質問を投稿して最善の方法を議論します.NETで、古いXMLを直接変換します。
UPDATE 2011-08-16: いくつかの実験の後、シリアル化された元のタイプがISerializableを実装した場合、ISerializableとシリアル化の代理手法の両方が正常に機能するようです。そうでない場合、タイプが[Serializable]属性を使用しただけの場合、オブジェクトの各フィールドが表示されます。グラフには、追加の属性の形式でいくつかの貴重な型情報がありません。
[Serializable]属性の使用例
ISerialzableの実装例:
NetDataContractSerializerとカスタムバインダーを使用してタイプを変更し、そのタイプにISerializableを実装するか、基本的にISerializalbeの役割を果たすシリアル化サロゲートを指定するサロゲートセレクターを提供することで最初の例を逆シリアル化すると、ISerializationSurrogateに空のSerializationInfoが表示されます。 .SetObjectDataメソッド。2番目の例でxmlを処理すると、SerializationInfoは正しい情報を取得しているように見え、期待どおりに機能します。
私の結論は、SerializableAttributeのみを介してシリアル化をサポートする型に対してNetDataContractSerializerによって生成されるデフォルトのXMLは、型情報が不足しているため、ISerializableまたはシリアル化サロゲート手法を使用した逆シリアル化と互換性がないということです。したがって、NetDataContractSerializableをより将来にわたって利用できるようにするには、シリアル化をカスタマイズして、このタイプ情報がXMLに含まれるようにし、ソースXMLを手動で変換せずに後で逆シリアル化をカスタマイズできるようにする必要があります。
datacontractserializer - NetDataContractSerializerとDataContractSerializer
データベースでシリアル化したままにしておきたいオブジェクトを含むアプリケーションがあります。
現在使用していますNetDataContractSerializer
が、最近、関連する.Net
タイプ情報のために、基本的なオブジェクトであっても、アプリケーションが遅くなることを意味する巨大なファイルが作成されることがわかりました。
代わりに切り替えることを検討しDataContractSerializer
ており、2つの比較を探していましたが、1つは見つかりませんでした。
- 2つによって作成されたオブジェクト間のサイズの違いは何ですか?
- パフォーマンスに大きな違いはありますか?
List<X>
を含むオブジェクトがあり、X
他の複数のオブジェクトに継承されているため、実行時にリストに多くの異なるタイプが含まれている場合、それらのいずれかに問題がありますか?(属性をDataContractSerializer
指定できると言われましたが、これはコード内の依存関係が増えることを意味します。ソリューションでそのすべてのタイプを知る方法はありますか?)KnownTypes
DataContractSerializer
ありがとう。
.net - ネストされたデータの逆シリアル化
私の最初の試みとJSONの非現実化、そして私は立ち往生しています、あなたが助けることができるかどうか疑問に思っていますか?
私は次のJSONを持っています
ここに私のc#コード
そして、私はステータスの結果にのみ興味があり、他には何もありません。RunningForに対して0を返すだけなので、何が間違っているのでしょうか。
前もって感謝します
c# - オブジェクト削除エラー後のシリアル化(NetDataContractSerializer)
NetDataContractSerializerを使用しています。オブジェクトを作成、追加、シリアル化してデータファイルに問題なく追加できます。ファイルをGUIにリロードしても問題はありません。
ただし、データからオブジェクトを削除(削除)してデータを再保存(シリアル化)しようとすると、問題が発生します。
これが私の部屋の削除ボタンです。ユーザーが特定のフロアの部屋の削除を要求すると、プログラムはその特定のフロアのその特定の部屋にあるオブジェクトのリストを作成します。次に、それらを削除し、表示している現在のフォームを閉じて、データを保存します。
プログラムがクラッシュせず、現在のフロアの部屋のリストから部屋が削除されるため、これは機能しているようです。
ただし、ファイルをリロードしようとすると(プログラムを閉じ、開いてロード)、次のエラーが発生します。
「オブジェクトの逆シリアル化中にエラーが発生しました。ルートレベルのデータが無効です。1行目、1番目の位置です。」
これが私のdeleteRoomボタンです
これがメソッドdeleteAsset()の私のCRUDです
これが私のPersistanceControllerです
c# - DataContract/Serializable ミッシュマッシュを逆シリアル化するときのオプションのプロパティ
を介していくつかの単純なクラスをディスクに永続化する既存のコードベースNetDataContractSerializer
がありますが、残念ながらクラスは[DataContract]
ではなく で装飾されてい[Serializable]
ます。これは問題なく動作しますが、古いバージョンで生成されたファイルを引き続き読み取ることができるようにしながら、永続化されたクラスにいくつかの新しいプロパティを追加したいと考えています。
これがクラスだとしましょう:
ここで、古いファイルを逆シリアル化すると、含まれていないため例外が発生しますNewProperty
。意味あり。NewProperty
したがって、無視したかったの[OptionalField]
ですが、欠落しているフィールドをシリアライザーに無視させる属性がありますが、プロパティには適用できません-フィールドのみです。
したがって、プロパティも持つ[DataContract]
andを使用することにしましたが、これによりシリアル化されたファイルのレイアウトが変更され、古いデータ ファイルを読み取ることができなくなります。さらに、混在させることはできません。シリアライザーが属性を認識した場合、ディレクティブは無視されます。[DataMember]
IsRequired
[Serializable]
[DataMember]
[Serializable]
[DataMember]
では、古いファイルを 1 回だけ変換するオプション (可能ですが、私の最初の選択ではありません) を除いて、既存の XML シリアル化オブジェクトのフィールドを無視するように NetDataContractSerializer を取得する方法はありますか?
.net - コンパクト フレームワーク 3.5 は System.Runtime.Serialization をサポートしていますか?
私は、.NET コンパクト フレームワークを使用する少なくとも 1 つを含む、多くの異なる .NET アプリケーション間で共有されるクラスのセットであるライブラリを作成しています。DataContractJSONSerializer を使用して簡単にシリアル化および逆シリアル化できるように、これらのクラスに一連の [DataMember] で [DataContract] 属性を使用するようにしています。この機能 (DataContractAttribute、DataMemberAttribute、および DataContractJsonSerializer) が .NET Compact Framework 3.5 でサポートされているかどうかを調べるために Web を検索してきましたが、サポートされているクラスの完全なリストを見つけることさえできませんでした。 。ネットフレームワーク。
これらの機能のサポート範囲を知っている人はいますか?