.NET Core json Сериализация свойств динамического (ExpandoObject)

У меня есть веб-api в .NET Core 1.0, и мне нравится новая функция, которая по умолчанию имеет сериализацию camelCasing вместо PascalCasing.

Однако некоторые из моих api-методов возвращают dynamic или ExpandoObject, а свойства на них сериализуются так, как они есть, что означает, если я добавлю их в динамический объект как PascalCasing, тогда как они будут сериализованы.

Я полагаю, потому что динамический объект тесно связан с Dictionary<string, object> и почему он ведет себя по-другому.

Как сделать dynamic сериализованным с camelCasing красивым способом?

(Я мог бы сделать это заново создав словарь в каждом возвращенном динамике с помощью строчного ключа, прежде чем возвращать их из API, но я ищу довольно хороший способ достижения цели)

Ответ 1

Это можно решить с помощью Startup.cs → ConfigureServices:

services.AddMvc().AddJsonOptions(opt =>
{
    opt.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
});

Здесь упоминается несколько мест, которые теперь являются поведением по умолчанию для ASP.NET Core 1.0, но это на самом деле не так. Добавление этой строки влияет на динамические свойства, и по умолчанию это не влияет.