指定方法は、WCFされているconfigる薬?
-
13-09-2019 - |
質問
いってみましょう呼んでい Data<TKey>
.また、WCFサービス契約約を受け付けるタイプ(可能で Wrapper
としての性タイプ Object
(理由なくこなオプション)
[DataContract]
public class Data<TKey> { ... }
[DataContract]
public class Wrapper
{
[DataMember]
public object DataItem { get; set; }
}
まずは送信二つのクラス IntData
や LongData
:
[DataContract]
public class IntData : Data<int> { /*empty*/ }
[DataContract]
public class LongData : Data<long> { /*empty*/ }
彼らは両方で設定され知られたconfigファイルです。コンフィグの似たようなこと:
<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>
この時点で、全てに働きます。
がんの約を追加するよびクレジットカードというのは、不要です。純授業 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>
何が正しい構文です。
(注ぎることができませんけ [KnownType(...)]
属性 Wrapper
もともと私のタイプです。Configにしてようやく膨大なものとなる。)
編集
@barettaの答えたがります。ただし、最初にこのエラー:
タイプ'MyAssembly.データに"1[システム。Int64]'を追加することはできませんの一覧が知られて別タイプ'MyAssembly.データに"1[システム。Int32]'と同じデータ契約の名前"http://www.mycompany.com/MyAssembly:Data'は既に存在する。
なかったので、元の質問ですが、私のタイプは明示的なデータ契約の名前です。のようなこと:
[DataContract(Name = "Data")]
public class Data<TKey> { ... }
上記のエラーが発生したので外しま Name
プロパティ値の属性。こう。どうなるかはわからない形式の作品をこのシナリオ。これらのなかった:
[DataContract(Name = "Data\`1")]
[DataContract(Name = "Data{TKey}")]
誰にでもいるのか?
編集2
ってくれたことに感謝を@にbarettaたことを指摘し、正しい書式は:
[DataContract(Name = "Data{0}")]
解決
汎用タイプinstantiableから文字列の場合、文字列おりこのパターン:クラスの名前の後に"`"文字の数の型パラメータ(この例では1)の型パラメータで囲まれた"[]"をコンマとしての型パラメータのセパレータ.
<configuration>
<system.runtime.serialization>
<dataContractSerializer>
<declaredTypes>
<add type="Wrapper, TheirAssembly">
<!-- this syntax is all good -->
<knownType type="Data`1[System.Int32], MyAssembly"/>
<knownType type="Data`1[System.Int64], MyAssembly"/>
</add>
</declaredTypes>
</dataContractSerializer>
</system.runtime.serialization>
</configuration>
編集:しかも、その場合には組み立て情報を設定する必要があり、型パラメータ(althougでない場合もmscorlib、入れ子"[]"を使用します。
<knownType type="Data`1[[System.Int32, mscorlib]], MyAssembly"/>
編集:カスタマイズすることができます名前でジェネリック薬の種類-データの引用文字列の形式のパターンです。
[DataContract(Name = "Data{0}")]
public class Data<TKey>
{...}
デフォルトでは、氏名生成のためのデータ<Int32> タイプのようなもの"DataOfInt32HJ67AK7Y"、"HJ67AK7Y" ではのハッシュから生成される文字列"urn:デフォルトの名前空間のクラスの場合はあります。が"データ{0}"ということにより名"DataInt32".
以上 こちらの.というものが"カスタマイズデータ契約名のための汎用タイプ"の一部のページです。
他のヒント
から こちらの...
知られて 種類を定義することもできconfigとして 以下に示します。
<configuration>
<system.runtime.serialization>
<dataContractSerializer>
<declaredTypes>
<add type="MyCompany.Library.Shape`1,
MyAssembly, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=XXXXXX, processorArchitecture=MSIL">
<knownType type="MyCompany.Library.Circle`1,
MyAssembly, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=XXXXXX, processorArchitecture=MSIL">
<parameter index="0"/>
</knownType>
</add>
</declaredTypes>
</dataContractSerializer>
</system.runtime.serialization>
</configuration>
上記のconfigを指定すること 汎用パラメータ丸は、 と同一の汎用パラメーターの 宣言型ます。コンフィグが可能 に定義されている 任意複雑になります。たとえば、 のために必要な定義 円< 辞書< 文字列、T>>としての 知られるタイプの形状< T>(もちろんこ は純粋に学術)で説明ができるとともに おります。
<configuration>
<system.runtime.serialization>
<dataContractSerializer>
<declaredTypes>
<add type="MyCompany.Library.Shape`1,
MyAssembly, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=XXXXXX, processorArchitecture=MSIL">
<knownType type="MyCompany.Library.Circle`1,
MyAssembly, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=XXXXXX, processorArchitecture=MSIL">
<parameter type="System.Collections.Generic.Dictionary`2">
<parameter type="System.String"/>
<parameter index="0"/>
</parameter>
</knownType>
</add>
</declaredTypes>
</dataContractSerializer>
</system.runtime.serialization>
</configuration>
注のconfig要素 "パラメータの属性'タイプ' と'index'.