直接WCFサービスで使用することはできませんオブジェクト(DataContracts)を露出?
-
05-09-2019 - |
質問
私は、継承を使用するいくつかのオブジェクトクラスを持っています。私が唯一の直接サービスによって使用されているオブジェクトへのアクセスを得ることができるようです。私は私が達成しようとしているものをお見せしましょう。
[DataContract]
public class Object1
{
[DataMember]
int Id {get; set;}
}
[DataContract]
public class object2: Object1
{
[DataMember]
string Name {get; set;}
}
[DataContract]
public class object3
{
[DataMember]
int SomeNumber {get; set;}
}
サービス:
public int GetId(object2 obj)
{
return GetTheId(object2.Name);
}
は、今、私はサービスにobject2は使用しておりますので、オブジェクト1は、あまりにもシリアライズされます。 Howerver、私はいくつかの理由のために露出しているオブジェクト3することをお勧めします。私は、そのタイプが別のプロセスの後に決定することができるように通過する必要が派生クラスであってもよいです。私は、このオブジェクトが直列化された取得表示されません。私はあなたがのDataContract / DataMemberプロパティを設定したときに、それらのオブジェクトがシリアライズさになるだろうと想定しました。それは私はあなたが必要ないかもしれないアイテムを暴露して、問題を見ることができるbecuase、使用開始されていない何かを露出させない意味を成しません。直接サービスで使用されていないオブジェクトを公開するための最良の方法は何ですか?おかげ
ダニエル
解決
あなたは<のhref = "http://msdn.microsoft.com/en-us/library/system.runtime.serialization.knowntypeattribute.aspx" RELと(クラスの独特の名前を:))object2は飾る必要があります= "nofollowをnoreferrer"> KnownType属性でます:
[DataContract]
[KnownType(typeof(object3))]
public class object2
{
}
あなたがオブジェクト2のサブクラスであるオブジェクト3を意味すると仮定します:
public class object3: object2
{
}
他のヒント
私はあなたがあなた自身の質問に答え信じています。会員がサービスによって使用されていない場合は、それらをさらすべきではありません。それは一般的にサービスのメンテナンス性を向上しますように、サービスに必要な最小限のデータセットを公開することは常に良いです。