質問

いってみましょう呼んでい Data<TKey>.また、WCFサービス契約約を受け付けるタイプ(可能で Wrapper としての性タイプ Object (理由なくこなオプション)

[DataContract]
public class Data<TKey> { ... }

[DataContract]
public class Wrapper
{
    [DataMember]
    public object DataItem { get; set; }
}

まずは送信二つのクラス IntDataLongData:

[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>

この時点で、全てに働きます。

がんの約を追加するよびクレジットカードというのは、不要です。純授業 IntDataLongData.もしか存在しないので...

かを指定する方法を汎用タイプ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'.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top