C# ServiceBehavior пользовательская сериализация JSON

При десериализации запроса я получаю ненулевой, но пустой словарь.

Объект, который я хочу опубликовать:

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?

0 ответов

Другие вопросы по тегам