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?