Создание моделей API в .NET с именами свойств PascalCase, но сериализация в CamelCase - PullRequest
0 голосов
/ 25 февраля 2019

Обычно я использую различные инструменты для работы с текстом, чтобы извлечь список свойств из некоторой документации API REST, а затем использую Newtonsoft.Json, чтобы добавить аннотацию над полем, чтобы сообщить программе, пока это свойство может быть вызвано "DeliveryAddress ", когда мы сериализуем в JSON, пожалуйста, назовите его" deliveryAddress ", используя

[JsonProperty(PropertyName = "deliveryAddress")]
public string DeliveryAddress{ get; set; }

Это кажется немного длинным, поэтому мне было интересно, есть ли более простой способ, или какая-то функция в VS, которую я мог бы использовать, чтобы сделатьсвоего рода «макрос», чтобы применить эту аннотацию к списку свойств PascalCase.

Ответы [ 3 ]

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

Вы можете вручную создать сериализатор с помощью конвертера дел:

var jsonSerializersettings = new JsonSerializerSettings
{
    ContractResolver = new CamelCasePropertyNamesContractResolver()
};

var myJsonOutput = JsonConvert.DeserializeObject<object>myJsonInput.ToString(),jsonSerializersettings);
0 голосов
/ 25 февраля 2019

Имена свойств по умолчанию сериализуются в camelCase в ядре ASP.net.

Если по какой-то причине это не так или вам нужно настроить его дальше, стратегию именования можно указать вручную, задав NamingStrategy в настройках сериализатора JSON:

services.AddMvc().AddJsonOptions(options =>
{
  var resolver = options.SerializerSettings.ContractResolver as DefaultContractResolver;
  resolver.NamingStrategy = new CamelCaseNamingStrategy();
});

Тогда каждый раз, когда вы возвращаете объект из API, он будет сериализован с именами случаев верблюда.

Если вы 'Чтобы вручную сериализовать JSON в строку, вы можете ввести IOptions<MvcJsonOptions>, чтобы получить доступ к настройкам сериализатора по умолчанию, которые использует MVC:

var jsonString = JsonConvert.SerializeObject(obj, options.Value.SerializerSettings);
0 голосов
/ 25 февраля 2019

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

Существует еще одна аннотация уровня class , которую можно использовать здесь.

[JsonObject(NamingStrategyType = typeof(CamelCaseNamingStrategy))]
public class Order
{
    public string DeliveryAddress {get;set;}
    public string FirstName {get;set;}
    [JsonProperty(NamingStrategyType = typeof(SnakeCaseNamingStrategy))]
    public string NewlyAddedProperty {get;set;}
}

Это будет применятьсяCamelCasing при сериализации для всех свойств, и этот может быть может быть переопределен на уровне встроенных аннотаций, как показано выше.

Какая прекрасная библиотека.

...