タイプがあります。Data<TKey>
としましょう。私はまたタイプObject
のタイプ(それはWrapper
と呼ぶことができます)を受け入れるWCFサービス契約を持っています。彼らは両方のファイルをconfigの既知のタイプで構成されている一般的なconfigのWCF既知の型を指定する方法は?
[DataContract]
public class IntData : Data<int> { /*empty*/ }
[DataContract]
public class LongData : Data<long> { /*empty*/ }
:
[DataContract]
public class Data<TKey> { ... }
[DataContract]
public class Wrapper
{
[DataMember]
public object DataItem { get; set; }
}
今私は、2つのクラスIntData
とLongData
を送信しています。設定は次のようになります。
<configuration>
<system.runtime.serialization>
<dataContractSerializer>
<declaredTypes>
<add type="Wrapper, TheirAssembly">
<knownType type="IntData, MyAssembly"/>
<knownType type="LongData, MyAssembly"/>
</add>
</declaredTypes>
</dataContractSerializer>
</system.runtime.serialization>
</configuration>
この時点ですべて正常です。
しかし、私は第3のタイプを追加しようとしています。不要な空の.NETクラスIntData
とLongData
が好きではありません。それらが存在するのは...
WCF設定でジェネリックタイプを指定する方法がわかりません!
このようなことをしたいのですが、正確な構文がわかりません。
<configuration>
<system.runtime.serialization>
<dataContractSerializer>
<declaredTypes>
<add type="Wrapper, TheirAssembly">
<!-- this syntax is wrong -->
<knownType type="Data{System.Int32}, MyAssembly"/>
<knownType type="Data{System.Int64}, MyAssembly"/>
</add>
</declaredTypes>
</dataContractSerializer>
</system.runtime.serialization>
</configuration>
正しい構文は何ですか?
(それは私のタイプではないと私はWrapper
に[KnownType(...)]
属性を置くことができないことにも注意してください。コンフィグは唯一の方法であると思われる。)
EDIT
barettaの答え@うまく働きました。
Type 'MyAssembly.Data`1[System.Int64]' cannot be added to list of known types since another type 'MyAssembly.Data`1[System.Int32]' with the same data contract name ' http://www.mycompany.com/MyAssembly:Data ' is already present.
は、私は元の質問でそれを言及しなかったが、私のタイプは、明示的なデータコントラクト名を持っている:最初に、私はこのエラーを受け取ったことに注意してください。このような何か:私は属性からName
プロパティ値を削除するまで
[DataContract(Name = "Data")]
public class Data<TKey> { ... }
は、上記のエラーが発生しました。それは他の誰かを助けることを望む。私はこのシナリオでどんなフォーマットが働くか分からない。これらはそうではありませんでした:
[DataContract(Name = "Data\`1")]
[DataContract(Name = "Data{TKey}")]
誰でもこの方法を知っていますか?
EDIT正しい構文が実際にあることを指摘し@barettaに再び2
ありがとう:
[DataContract(Name = "Data{0}")]
ええ、私は知っている!私は私の答えを編集 – baretta