Выбор NamingStrategy при использовании JsonConverter для свойства класса - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть класс ac #, который я пытаюсь правильно сериализовать, используя Newtonsoft.Json.Свойство является типом перечисления, и я хочу, чтобы значение было сериализовано как «строчная версия имени перечисления».Существует JsonConverterAttribute для указания этого свойства, а также предварительно написано StringEnumConverter, но мне нужно указать CamelCaseNamingStrategy для этого преобразователя, но я не могу определить синтаксис.

Я попытался присвоить его самому свойству:

public class C
{
    [JsonConverter(typeof(StringEnumConverter),NamingStrategy=typeof(CamelCaseNamingStrategy))]
    public ChartType ChartType { get; set; }
}

, и я также попытался добавить его аналогичным образом к самому типу перечисления:

[JsonConverter(typeof(StringEnumConverter),NamingStrategy=typeof(CamelCaseNamingStrategy))]
public enum ChartType { Pie, Bar }

Носинтаксис неправильный.Я не могу найти никаких примеров этого в документации Newtonsoft .

Желаемый сериал будет: "ChartType":"pie" или "ChartType":"bar"

Есть идеи?Спасибо.

Ответы [ 3 ]

0 голосов
/ 01 февраля 2019

Другое возможное решение - JsonSerializerSettings

var settings = new JsonSerializerSettings
{
    Converters = new List<JsonConverter> {
        new StringEnumConverter(new CamelCaseNamingStrategy())
    }
};
var result = JsonConvert.SerializeObject(obj, settings);
0 голосов
/ 02 апреля 2019

Это работает для меня, чтобы включить верблюжий покров в одном месте в веб-интерфейсе .Net Core:

[JsonConverter(typeof(StringEnumConverter), true)]

Обратите внимание, что вы можете добавлять параметры конструктора к типу, заданному первым параметром и `StringEnumerConverterимеет следующий перегруженный конструктор:

StringEnumConverter(bool camelCaseText)

Конечно, включение этого параметра глобально, как правило, является предпочтительным, как обсуждено, например, здесь .

0 голосов
/ 01 февраля 2019

Хорошо, похоже, это работает:

[JsonProperty("type")] 
[JsonConverter(typeof(StringEnumConverter), 
     converterParameters:typeof(CamelCaseNamingStrategy))]
public ChartType ChartType { get; }  

Поскольку NamingStrategy является свойством StringEnumConverter, которое применяется с использованием converterParametersпараметр.Это получило желаемый результат.Я думаю, что пример этого будет полезен в документации Newtonsoft.

...