リクエストを逆シリアル化すると、null ではなく空の辞書が取得されます。
投稿したいオブジェクト:
public class Data
{
public IDictionary<string, object> Dictionary { get; set; }
}
リクエストとともに送信する本文は次のとおりです。
{"Dictionary":{"key1":"value1","foo":"bar"}}
組み込みのシリアライザはData
、空の を持つオブジェクトを作成しますDictionary
。Newtonsoft シリアライザーは、私の思いどおりに動作します。そのため、グーグルで調べた後、サービス契約をStream
ではなく を受け入れるように変更しましたData
。
using Newtonsoft.Json;
[ServiceContract]
interface IMyServiceContract
{
[OperationContract]
[WebInvoke(
Method = "POST",
UriTemplate = "data",
RequestFormat = WebMessageFormat.Json)]
void PostData(Stream body);
}
class MyServiceContract : IMyServiceContract
{
void PostData(Stream body)
{
using (var reader = new StreamReader(body))
json = reader.ReadToEnd();
data = JsonConvert.DeserializeObject<Data>(json);
// ...
}
}
ここでの主な問題は、ヘッダーを指定するとリクエストが受け入れられなくなるContent-Type: application/json
ことですData
.
サービスのカスタム デシリアライザーを指定するにはどうすればよいですか? または、不可能な場合は、Content-Type が指定されていても現在のソリューションを機能させますか?