問題タブ [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.

0 投票する
2 に答える
2014 参照

.net - XML と DataContractSerializer

こんな授業があります

私はこれがこのようなXMLを生成したい

しかし、次のようなものが得られています:

これを修正することは可能ですか?この記事によると、DataContractSerializer の欠点の 1 つは次のとおりです。

  1. 名前と順序を設定する以外に、オブジェクトをシリアル化する方法を制御できない

これは解決可能な問題ではないのではないかと思います。


IXmlSerializableこれはand ReadXml/で実行できることを知ってWriteXmlいました。これは、まさにそれを行うコードを削除することになっているためです。

0 投票する
1 に答える
357 参照

datacontractserializer - 逆シリアル化中に DataContractSerializer を使用して親オブジェクトを取得する

この質問とほぼ同じですが、Serializable ではなく DataContractSerializer です。

私は明示的に親参照をシリアライズしたくありません。

また、子が構築される前に、オブジェクトの親がバインドされることを本当に望んでいます。

ところで:それが違いを生むなら、私はXMLを使用しています

0 投票する
2 に答える
8683 参照

c# - 出力XMLにオプション(つまり、Nullable<>およびList<>)要素を作成しないようにDataContractSerializerを構成できますか?

新しい.NET3.0DataContractSerializerを使用しています。シリアル化するNullable<>オブジェクトとList< >オブジェクトの両方があります。例:

.NETがnullまたは空のリストをシリアル化する場合、nil(Nullableの場合)およびempty(リストの場合)要素をXMLに入れます。上記の例では、次のように生成されます。

説明する時間がないという理由で、次のように、余分なNullableNumber要素とNumbers要素を削除したいと思います。

実際、上記のファイルはシリアライザーで正常に逆シリアル化されます。

ご協力いただきありがとうございます!

0 投票する
3 に答える
3802 参照

c# - ISerializable を DataContractSerializer で使用する場合、シリアライザーが型情報を出力しないようにするにはどうすればよいですか?

シリアル化をより詳細に制御するために、クラスを から[DataContract]に変換し、 と特別な逆シリアル化コンストラクターの[Serializable]両方を実装しました。GetObjectDataこれを行うと、発行された XML の型情報がすべての要素に適用されます。私はこの余分な情報を望んでおらず、シリアライザーにそれを出力しないように通知する方法を考えています。

を使用するサンプル コードは次の[DataContract]とおりです。

これにより、次の XML が出力されます (Nullable Number および Number に型情報がないことに注意してください。これが目的の出力です)。

上記のコードを次のように変更すると ([Serializable]、: ISerializable、および 2 つのシリアル化メソッドを追加):

次の XML を発行するようになりました。各要素に追加された型情報 (i:type="x:int") に注意してください。

なぜこれを行うのですか?それをやめさせるにはどうすればよいですか?

ありがとう!

0 投票する
1 に答える
1747 参照

wcf - WebInvoke / DataContractJsonSerializer、「1,6276」は「double」として解析できません

/ベースのシリアル化を使用してWebInvokeAttribute、宣言型JSONリクエスト(DataContractJsonSerializer)にWCFを使用しています。DataContractAttributeDataMemberAttribute

異なるカルチャに基づくデータを含むJSONの返送をサポートするサービスを使用しています。デフォルトでは、このサービスはen-USカルチャ設定を使用します。つまり、小数点は「。」になります。

プロパティを持つクラスがありSystem.Doubleます。小数点記号として「、」を使用するカルチャを使用してデータを要求すると、 :SerializationExceptionを解析するときに、このプロパティの値を逆シリアル化しようとすると時間がかかります。System.Double

「タイプXXXのオブジェクトの逆シリアル化中にエラーが発生しました。値「1,6276」はタイプ「double」として解析できません。」

これは確かに、Doubleの解析中に不変のカルチャが使用されるためです。現在のスレッドに正しいカルチャを設定することでこれが修正されることを期待していましたが、修正されませんでした。

そのため、「。」を使用していないカルチャではサービスが中断されます。小数点記号として。

助けていただければ幸いです。

ありがとう!

0 投票する
2 に答える
862 参照

.net - DataContractSerializerを使用してシリアル化を条件付きで制御できますか?

一部のクラスをDataContractSerializationを使用するように変換して、出力にLinqエンティティを含めることができるようにします。その過程で、ある種の理論的な質問が頭に浮かびました。答えが「いいえ」であると確信している間、とにかく質問を投げかけると思いました。

オブジェクトを条件付きでシリアル化する方法はありますか?たとえば、顧客に情報を送信する目的でEmployeeオブジェクトをシリアル化する場合、アドレスを含めたくない場合があります。一方、その従業員を管理するサイトのWebサービスで使用するためにシリアル化する場合は、その情報が必要になる可能性があります。

別の可能性は、それらがシリアル化されているベースオブジェクトであるかどうかに基づいて特定のメンバーをシリアル化することです。したがって、ロケーションを含むチケットクラスがあり、ロケーションに連絡先のリストが含まれている場合、チケットをシリアル化する場合、その連絡先リストはおそらく必要ありません。しかし、私がロケーション自体を操作しようとしているのであれば、それは良いことかもしれません。

それで、それについて何か考えはありますか?

0 投票する
3 に答える
1163 参照

.net - XSL スタイルシートは、DataContractSerializer によって生成された XML を解析しません

XMLSerializer を使用してシリアライズし、XSLT を使用してさまざまな形式の電子メールまたは Web サービス呼び出しに変換するいくつかのクラスがありました。すべてが順調でした。

データ レイヤーの一部で Linq の使用を開始したため、XSL スタイルシートで使用される Linq オブジェクトの一部をシリアル化する必要がありました。XMLSerializer の代わりに DataContractSerializer を使用する方がおそらく最善であると判断しました。

DataContracts とすべてをセットアップし、エンティティ名にいくつかの小さな変更を加えてうまくシリアル化します... しかし、スタイルシートは XML をまったく処理しません。少なくとも何かが得られない理由が本当にわかりません...基本的には、xslタグが取り除かれたデータだけが得られます。

何が原因でしょうか?

編集:

以下は、DataContract 宣言を変更する前に DataContractSerializer から生成された XML です。

0 投票する
2 に答える
1821 参照

.net - WCF サービスで直接使用できないオブジェクト (DataContracts) を公開していますか?

継承を使用するオブジェクト クラスがいくつかあります。サービスによって直接使用されるオブジェクトにしかアクセスできないようです。私が達成しようとしていることをお見せしましょう:

サービス:

現在、サービスで object2 を使用しているため、object1 もシリアル化されます。ただし、何らかの理由で object3 を公開したい場合があります。後で別のプロセスのためにその型を決定できるように、渡す必要があるのは派生クラスである可能性があります。このオブジェクトがシリアライズされていません。DataContract / DataMember を設定するたびに、これらのオブジェクトがシリアル化されると想定しました。必要のないアイテムを公開すると問題が発生する可能性があるため、使用されていないものを公開しないことは理にかなっています。サービスによって直接使用されないオブジェクトを公開する最善の方法は何ですか? ありがとう

ダニエル

0 投票する
1 に答える
5203 参照

c# - ツリー構造のシリアル化/非リアル化

ツリー構造を保存(シリアル化)して後で開く(逆シリアル化)ための最良の方法を見つけようとしています。私の構造は、さまざまなプロパティを持つさまざまなオブジェクトタイプで構成されていますが、それぞれが基本抽象「Node」クラスを継承しています。

各ノードには一意のID(GUID)があり、ノードの親を設定するAddSuperNode(Node nd)メソッドがあります。これにより、親ノードがどのサブノードを持っているかを知ることができる他のメソッドが呼び出されます。ただし、一部のノードは、ノードにセカンダリ親を追加するAddAuxSuperNode()メソッドも利用します。

バイナリシリアル化を使用していましたが、今はもう少し制御しやすく、シリアル化されたデータにアクセスしやすいものを使用したいと思います。また、逆シリアル化するときにタイプ情報を保持し、プライベート値をシリアル化できるようにしたいです。したがって、 DataContractSerializerは最善の方法のように思われました。

ノードに複数の親があるため、ルートノードを直接シリアル化することはできません。重複するオブジェクトを作成したくありません。したがって、ツリーをフラットリストに分解してから、シリアル化する必要があるように思われます。次に、そのリストをシリアル化した後、ツリーを再構築します。これは正しいですか?

前に述べたように、各ノードには一意のGUID識別子がありますが、現在、ノードは親/子を直接参照しており、IDを保存していません。AddSuperNode ()メソッドとAddAuxSuperNode()メソッドを更新して、直接参照に加えて、シリアル化する親IDのリストも更新できます。ただし、オブジェクトがシリアル化されているときにのみ、このリストを更新/作成したいと思います。そのため、シリアル化の直前に呼び出されるノードにUpdateSuperNodeIDRefs()メソッドを作成することを考えていました。

以下は、この構造のシリアル化と逆シリアル化のために私が計画していることです。誰かがこれを行うためのより良い/よりクリーンな/より効率的な方法を提案できますか?

シリアル化

1)ツリー構造のルートノードを提供します

2)ツリー構造をフラットな辞書(Guid id、Node nd)に分解します。ここで、idndのGUIDです。

3)UpdateSuperNodeIDRefs( )を呼び出します; 各ノードがその親のために保存したIDを更新します。

4)DataContractSerializerを使用してノードのディクショナリをシリアル化します

デシリアライズ

1)ノードのディクショナリを逆シリアル化します

2)ディクショナリ内の各ノード繰り返し処理し、それぞれを親に再接続します。保存されている親IDについては、一致するIDを持つ辞書でそれぞれのノードを見つけ、AddSuperNode ()またはAddAuxSuperNode()を呼び出してノードそのに再接続します。

3)ディクショナリ内の任意のノードから、構造のルートを見つけます

4)ルートノードを返す