私はパラメータでPropertyValueをを取る方法UpdatePropertyで、WCFサービスがあります。KeyValuePair
void UpdateProperty(PropertyValue propertyValue)
[DataContract]
public class PropertyValue
{
[DataMember]
public string Property { get; private set; }
[DataMember]
public object Value { get; private set; }
}
私は値としてKeyValuePairでメソッドを呼び出ししようとしている、と私は取得していますこのエラー: メッセージをデシリアライズしようとしているときに
」フォーマッタが例外をスローしました:パラメータ http://tempuri.org/:propertyValueをデシリアライズしようとしているときにエラーが発生しましたのInnerExceptionメッセージがライン1に 「エラーでした。要素 'http://schemas.datacontract.org/2004/07/MyProject.DataContracts:Value' には、 'http://schemas.datacontract.org/2004/07/System.Collections.Generic:KeyValuePairOfanyTypeanyType'という名前にマップされた型のデータが含まれています。 デシリアライザには、この名前にマップされているタイプの知識はありません。あなたが DataContractSerializerを使用している場合は DataContractResolverの使用を検討してか、知られているタイプのリストに に「KeyValuePairOfanyTypeanyType」対応するタイプを追加 - KnownTypeAttribute属性を使用するか にに渡された既知の型のリストを追加することによって、 例えばシリアライザ。 ' 。詳細については のInnerExceptionを参照してください」
を私は私のクラスにKnownTypeを追加しようとしましたが、私はまだエラーを取得:
[KnownType(typeof(KeyValuePair<object, object>))]
私は他に他のKeyValuePairを使用している理由を任意のアイデアを?問題のない方法(パラメータとして)...私のSOAPボディに
、私が持っている:
<d4p1:Value xmlns:d7p1="http://schemas.datacontract.org/2004/07/System.Collections.Generic" i:type="d7p1:KeyValuePairOfanyTypeanyType">
<d7p1:key>test</d7p1:key>
<d7p1:value>test</d7p1:value>
</d4p1:Value>
ワイヤでシリアル化する 'KeyValuePair <,>'の実際のタイプは何ですか?それは本当に 'KeyValuePair
私は両方を試しましたが、実際に私のユースケースに必要なのは、KeyValuePairです。 –
user3544117
プロパティ 'Value'で使用している型がわからないようです。あなたのクラス 'PropertyValue'を' [KnownType(type)(MyType)] 'でマークします。' MyType'はあなたが 'Value'プロパティで彼に与えるタイプです。 – Rabban