0

リクエストを逆シリアル化すると、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 が指定されていても現在のソリューションを機能させますか?

4

0 に答える 0