問題タブ [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.
.net - カスタム ISerializationSurrogate を使用する場合、ネストされたコレクションをどのようにシリアル化しますか?
NetDataContractSerializer を使用してシリアル化されるフィールドの名前付けを制御するために、一般的なシリアル化サロゲートを使用しようとしています。GetObjectData メソッド内のコレクションへの参照を保持するフィールドに遭遇するたびに問題が発生することを除いて、概念はこれまでのところうまく機能しており、AddValue を呼び出してそれをフィードすると、コレクション型がアイテムにならないようです。連載中のコレクション。配列やリストなどのコレクションに対して何か特別なことをする必要がありますか?
誰かが私を正しい方向に向けることができることを期待して、以下の例を含む完全なコードのコピーを追加しました。
私がこの手法を試している理由は、パフォーマンスへの影響を懸念する内部処理 XmlException を引き起こす問題を回避するためです。
.net - `Serializable` オブジェクトのより高速なシリアライズ
クライアント/サーバー アプリは、を使用しNetDataContractSerializer
て任意Serializable
のオブジェクトをシリアル化します。
の出力はBinaryFormatter
多少小さくなりますが、パフォーマンスはそれほど良くありません。
より小さな表現が可能になり (例えばXmlSerializer
and DataContractSerializer
、Json、Protocol Buffers、Thrift などの出力)、シリアライズとデシリアライズがはるかに高速になります。
ただし、それらを使用するには、すべてのSerializable
クラスに移動して属性を追加し、場合によってはフィールドのアクセス レベルを変更する必要があります。これらのクラスは多くの異なる内部プロジェクトに分散しているだけでなく、クライアントには独自のプロジェクトがあります。Serializable
変更が必要なクラスを含むdll 。いわば一大事業。
オブジェクトで可能な他のパフォーマンスの向上と潜在的なサイズ削減 (gzip など以外) はありSerializable
ますか?
c# - 「タイプ .. の使用は NetDataContractSerializer ではサポートされていません」 - NetDataContractSerializer が使用されるのはなぜですか?
このエラーは、NetDataContractSerializer (NetDCS) が使用されているが、参照アセンブリが共有されておらず、クライアントに含まれているために発生します。この質問はそれについてではありません。
この質問は、NetDataContractSerializerが使用されないようにすることに関するものです。または、少なくともそれがクライアントによって使用されている理由を見つけます。
クライアントが NetDCS を使用するように構成していないのに、なぜNetDCS を使用するのですか?
私が見つけた記事/投稿によると、これは明示的なステップです。プロジェクトまたは WCF クライアントに対してこれを手動で有効にしていません。
クライアントに通常のDataContractSerializer (DCS) を使用させることはできますか?
もしそうなら、これを型ごとまたは名前空間ごとに強制することはできますか? ジェネリック フレームワークの "基本型" は、参照されているアセンブリに既に含まれています。理想的には、これらを NetDCS で解決し続けることができますが、この問題を「修正」するために NetDCS をあきらめます。
そうでない場合、応答/応答 XML を変更するなど、利用可能な抜本的な対策はありますか?
(必要なコントラクト リゾルバーを手動で追加し、生成された名前の破損を処理しても問題ありません。)
WCF テスト クライアント (常に DCS を使用しますか?) を使用すると「正常に動作します」。現在の問題は、プロジェクトのサービスを使用するときに発生する NetDCS デシリアライゼーションに関連していると思われます。WCF テスト クライアントのしくみを誤解している可能性があります。
問題を誤解していないことを確認するためのエラー メッセージ (NetDCS の参照アセンブリを追加することで解決できますが、私はそうしたくありません) を次に示します。これはclientでの逆シリアル化にあると 95% 確信しています。
メッセージを逆シリアル化しようとしているときに、フォーマッタが例外をスローしました..
「タイプ '..' を取得専用コレクションとして使用することは、NetDataContractSerializerではサポートされていません。CollectionDataContractAttribute 属性または SerializableAttribute 属性で型をマークするか、プロパティにセッターを追加することを検討してください。
そしてスタックの要約:
WCF クライアント構成は "単純な" 既定の構成であり、実行時に動作を変更するコードはありません。
サービス参照は VS 2013 で生成され、プロジェクトは .NET 4 をターゲットにしています。サービス参照を含むプロジェクトとテスト プロジェクトはどちらも単純なクラス ライブラリです。これらは IIS でホストされていません。
c# - NetDataContractSerializer を使用して Guid を WCF サービスに渡す
契約書を作成しました
ここでNetDataContractAttribute
説明する属性。呼び出していると、エラーが発生します。PassGuid
追加情報: メッセージのデシリアライズ中にフォーマッタが例外をスローしました: パラメータhttp://tempuri.org/:idのデシリアライズ中にエラーが発生しました。InnerException メッセージは、「XML 'Element' ' http://tempuri.org/:id ' には予期された属性 ' http://schemas.microsoft.com/2003/10/Serialization/:Type 'が含まれていません」でした。デシリアライザは、デシリアライズする型を認識していません。シリアル化されている型が、逆シリアル化されている型と同じコントラクトを持っていることを確認してください。詳細については、InnerException を参照してください。
しかしPassInt
、エラーなしで呼び出すことができました。
完全なソースコードはこちら.
編集: この質問は、このような GUID の送信効率に関するものではなく、主に NetDataContractSerializer の使用に関するものです。
c# - Datacontract を使用した空の文字列のシリアル化
私が考えることができるシリアライゼーションの最も一般的な例があります: 2 つの変数とその 1 つのインスタンスを持つクラスをシリアライズしたいと思います。ただし、以下のコードでは常に空の文字列が返されるという問題があります。なぜこれができるのか、私はアイデアを使い果たしました..