問題タブ [datacontractserializer]
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# - デシリアライザーには、このコントラクトにマップされる型の知識がありません
Node オブジェクトのツリーをシリアライズおよびデシリアライズしようとしています。抽象「Node」クラスと、そこから派生する他の抽象クラスおよび具象クラスは、「Informa」プロジェクトで定義されています。さらに、Informa でシリアライゼーション/デシリアライゼーション用の静的クラスを作成しました。
まず、ツリーをDictionary(guid,Node)型のフラット リストに分解します。ここで、guid は Node の一意の ID です。
問題なくすべてのノードをシリアル化できます。しかし、逆シリアル化しようとすると、次の例外が発生します。
行 1 位置 227 のエラー。要素 ' http://schemas.microsoft.com/2003/10/Serialization/Arrays:Value ' には、'Informa:Building' データ コントラクトのデータが含まれています。デシリアライザーには、このコントラクトにマップされる型の知識はありません。'Building' に対応する型を既知の型のリストに追加します。たとえば、KnownTypeAttribute を使用するか、DataContract シリアライザーに渡される既知の型のリストに追加します。
Building を含む Node から派生するすべてのクラスには、[KnownType(typeof(type t))]属性が適用されます。
私のシリアライゼーションとデシリアライゼーションの方法は次のとおりです。
c# - RuntimeType:http://schemas.datacontract.org/2004/07/System'は予期されていません
さて、DataContractSerializerをオブジェクトグラフで動作させました。詳細については、以前の質問を参照してください。
デシリアライザーには、この契約に対応するタイプの知識はありません。
ただし、私のフィールドの1つである_UserPropertyDefinitionsは、次のように定義されています。これは、このユーザーがデータ構造内のオブジェクトに追加できるカスタムプロパティのリストを定義します。文字列はプロパティを識別するための一意のキーであり、Typeはプロパティのタイプであり、常にBool、Int、Stringなどの基本的なタイプです。
各オブジェクトには、対応するDictionary(String key、Object value)コレクションがあり、「ユーザープロパティ」のいずれかに設定した値を格納します。
このプロパティが空のコレクションの場合、オブジェクトグラフは正常にシリアル化されますが、このコレクションにカスタムプロパティを追加すると、DataContractSerializerでシリアル化しようとすると次の例外が発生します。
データコントラクト名が「RuntimeType:http ://schemas.datacontract.org/2004/07/System」の「System.RuntimeType」と入力する必要はありません。静的に不明なタイプを既知のタイプのリストに追加します。たとえば、KnownTypeAttribute属性を使用するか、DataContractSerializerに渡される既知のタイプのリストにそれらを追加します。
このフィールドのDataMember属性を削除すると、例外を発生させずにシリアル化/逆シリアル化できますが、もちろん、このフィールドで作成した設定は失われます。
c# - DataContractSerializer によって作成された XML の書式設定
1 つの長い文字列ではなく、フォーマットされた XML を DataContractSerializer に吐き出させる簡単な方法はありますか? タグやコンテンツを変更したくないのですが、XML を読みやすくするために改行とインデントを追加するだけですか?
entity-framework - DataContractSerializer: DataContract/DataMember 属性なしでクラス/メンバーをシリアル化する方法
DataContractSerializer
クラスとメンバーをDataContract
およびDataMember
属性でマークする必要があります。ただし、私の場合、クラスは EFPocoAdapter フレームワークで自動生成され、これらの属性は存在しません。
これらの属性が存在しない状態で、DataContractSerializer を使用してすべてのメンバーのシリアル化を強制するにはどうすればよいですか?
アレクデジ より:
これは 3.5SP1 で変更されました 。
wcf - リクエストごとに同じオブジェクトを複数回シリアル化する DataContractSerializer
Silverlight アプリケーションで使用される WCF アプリケーションを作成中です。私はほとんどの設計作業を完了し、現在は実装を行っているため、この質問にたどり着きました。
私のアプリケーションに存在するものの例を次に示します。
ここに私が得ているものがあります: 私のアプリケーションでは、mostRecentlyUsedTowel は、その人のジムのタオル リスト内の何かを指しています。私のリクエストのいくつかは、Person オブジェクトをシリアル化します。
DataContractSerializer は、オブジェクトのまったく同じインスタンスを 2 回シリアル化するように求められていることに気付くほどスマートですか? もしそうなら、それはどのように対処しますか?
同じインスタンスを 2 回シリアル化するだけの場合、リンクを介して不要なデータを送信しないようにするにはどうすればよいですか?
c# - DataContractSerializer を使用してオブジェクトをシリアル化できないのはなぜですか?
DataContractSerializer を使用して型をシリアル化しようとしていますが、以下の例外が発生しています。これは SOA サービス用ではありませんが、可能であれば DataContractSerializer を使用したいと考えています。.Net 3.5 SP1 を使用しています。
データ コントラクト名 'DelegateSerializationHolder.DelegateEntry: http://schemas.datacontract.org/2004/07/System ' で 'System.DelegateSerializationHolder+DelegateEntry' を入力することは想定されていません。たとえば、KnownTypeAttribute 属性を使用するか、DataContractSerializer に渡される既知の型のリストにそれらを追加することにより、静的に認識されていない型を既知の型のリストに追加します。
.net - DataContractSerializer:メンバーを削除しないのはなぜですか?
Microsoft のBest Practices: Data Contract Versioningを読んでいて、次のように述べています。
以前のバージョンでIsRequiredプロパティがデフォルト プロパティのfalseのままだったとしても、新しいバージョンではデータ メンバーを削除しないでください。
誰でもこれの理由を提案できますか? 彼らは詳しく説明しません。新しいバージョンではデータ メンバーを追加しても問題ないと言われているので、削除しても問題ないようです。事実上、古いバージョンでは追加と見なされます。
違いは、(DataMemberAttribute の Order プロパティを使用して) 最後に新しいメンバーを追加することになっているのに対し、削除されるプロパティはおそらく最後ではないということです。しかし、欠落しているメンバーはロード中にデフォルト値のままになるとも言われているため、欠落しているメンバーが問題ないことは明らかです。
私は何が欠けていますか?製品の機能を廃止し、それに付随する [DataMember] プロパティを削除した場合、どのようなバージョン相互運用の問題 (前方互換性と後方互換性の両方) が発生しますか?
また、前方互換性に関心がないと判断した場合 (つまり、古いバージョンが新しいファイルを開くことに関心がない場合)、そのような問題は引き続き適用されますか?
c# - DataContractSerializer を使用したカスタム シリアル化
DataContractSerializer の使用を検討していますが、適切な出力形式を取得するのに問題があります。DataContractSerializer は、次のクラスをシリアル化します
の中へ
しかし、私が欲しいのは
DataContractSerializer でこれを行うにはどうすればよいですか? しかし、DataContractJsonSerializer の最初の出力も維持しますか?
wcf - さまざまなアセンブリでのデータ コントラクトの既知の型の宣言
メンバーの 1 つとして List (Of Common.myBaseClass) を含む複合型 (myComplexResult) を返す WCF サービスのメソッドがあります。このリストには、さまざまなタイプの Foo.myClass1 と Bar.myClass2 のアイテムを保持する必要があります。どちらも Common.myBaseClass から継承されます。これらのクラスはすべて、異なるアセンブリで定義されていることに注意してください。
サービスは次の例外をスローします。
データ コントラクト名が 'myClass1: http://mynamespace/foo/ ' のタイプ 'Foo.myClass1' は想定されていません。たとえば、KnownTypeAttribute 属性を使用するか、DataContractSerializer に渡される既知の型のリストにそれらを追加することにより、静的に認識されていない型を既知の型のリストに追加します。
さて、DataContractSerializer がそれらの処理方法を認識できるように、myClass1 と myClass2 を myBaseClass の既知の型として宣言する必要があることに気付きました。myClass1 と myClass2 の KnownType 属性を使用して myBaseClass クラスを装飾することはできません。これは、Foo アセンブリと Bar アセンブリへの参照を追加することになり、循環依存が発生するためです。
構成ファイルで definedTypes を使用したいと思っていましたが、これを試しました:
それは役に立たないようだったので、myComplexResult に KnownType 属性を追加しようとしました。
しかし、私はまだ同じエラーが発生しています。ヘルプ!私は何をしますか?