0

少なくとも20個のプロパティを持つドメインクラスUserがあり、それは別のライブラリからのものであるため、コントラクトデコレーションはありません。これをWCFサービスでxmlまたはjsonとして返すと、3つのプロパティのように返されるだけです。コレクションなどが抜けているのではないかと思いましたが、NameやEmailのような単純なフィールドでもまったく返されていませんでした。

だから私の質問は、誰かがサービスを介してシリアル化されて返されるものを正確に説明できるかということだと思います。[DataMember]のような装飾が施されたプロパティはありませんが、シリアル化されて返されるプロパティとそうでないプロパティがあります。私が理解しているように、すべてのパブリックプロパティを自動的にシリアル化する必要があります。そして、副次的な考えとして、シリアル化を支援するためにこれらの宣言を既存のライブラリに追加する方法について誰かが私に正しい方向を示すことができれば、それはありがたいです。

更新:wsdlを調べていたところ、xsdファイル(シリアライザーによって生成されたと想定)への参照が見つかりました。私はそれらの3つの[マッピング]フィールドしかリストされていないことに気づきました。これが何であるか、または私がそれを台無しにすることができるかどうかわからない。

4

2 に答える 2

1

これらのプロパティがシリアル化されなかった理由は、読み取り専用であるという点で正確に公開されていなかったためです。私は実際にプロパティを次のように設定しました:

public string MyProperty { get; internal set; }

これを行ったのは、内部システムクラス(コントローラータイプのもの)でオブジェクト初期化子を使用しており、コンシューマーがこれらのプロパティを設定できるようにしたくないためです。それらを保護に設定でき、シリアル化できるようになることを読みましたが、これは私の実装では機能しません。

これらはPOCOクラスであるため、私の解決策は(問題に対する正確な答えではありませんが)、DTOクラスを作成することでした。DTOのすべてのプロパティは完全に公開されているため、私が行うのは、POCOからのデータをそれらに入力し、dtoを返すことだけです。すべてが適切にシリアル化されます。

于 2012-09-04T17:46:09.057 に答える
0

ドメインクラスを見て、それが別のクラスから継承しているかどうかを確認します。そうである場合、Userクラスにはおそらく表示されている3つのプロパティしかありません。

私がうまく機能していることがわかったのは、ドメインモデルへの直接のインターフェイスではなく、パブリックデータインターフェイスとして特別なサービスモデル(またはビューモデル)を作成することです。利点として、公開される可能性のあるデータをより細かく制御できます。意図しないデータ漏洩のリスクを制限し、ネットワークを介して送信されるデータを最適化できます。

頑張ってください!

于 2012-08-31T17:49:18.313 に答える