모든 열거 형에 StringEnumConverter를 적용하도록 Json.Net에 전역 적으로 알리는 방법
열거 형을 문자열 표현으로 역 직렬화하고 json.net을 사용하여 그 반대도 마찬가지입니다. 프레임 워크에 적용하도록 지시 할 수있는 유일한 방법 StringEnumConverter
은 다음과 같이 문제의 속성에 주석을 추가하는 것입니다.
[JsonConverter(typeof(StringEnumConverter))]
public virtual MyEnums MyEnum { get; set; }
그러나 내 사용 사례에서는 StringEnumConverter
추가 주석이 필요없이 모든 열거 형이를 사용하여 (비) 직렬화되도록 json.net을 전역 적으로 구성하는 것이 훨씬 더 편리 할 것 입니다.
예를 들어 사용자 정의의 도움으로 그렇게 할 수있는 방법이 JsonSerializerSettings
있습니까?
Converters 컬렉션에 StringEnumConverter
를 추가합니다 JsonSerializerSettings
.
문서 : JsonConverters로 직렬화
serializer가 camelCasing을 사용하도록하려면 다음과 같이 설정할 수도 있습니다.
SerializerSettings.Converters.Add(
new StringEnumConverter { CamelCaseText = true });
이것은로 직렬화 SomeValue
됩니다 someValue
.
다른 답변은 ASP.NET에서 작동하지만 일반적으로 모든 컨텍스트에서 JsonConvert를 호출하기 위해 이러한 설정을 설정하려면 다음을 수행 할 수 있습니다.
JsonConvert.DefaultSettings = (() =>
{
var settings = new JsonSerializerSettings();
settings.Converters.Add(new StringEnumConverter {CamelCaseText = true});
return settings;
});
Global.asax.cs에서
HttpConfiguration config = GlobalConfiguration.Configuration;
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add
(new Newtonsoft.Json.Converters.StringEnumConverter());
ASP.NET Core 2의 경우 다음을 수행합니다.
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc()
.AddJsonOptions(options =>
{
options.SerializerSettings.Converters.Add(new StringEnumConverter());
});
...
이것은 아닙니다 services.AddJsonOptions(...)
. MVC에 대한 설정을 생성하고 있으므로 MVC에 태그를 지정해야합니다.
이전 답변은 버전 12.0.1에서 최신이 아닙니다. 새로운 방법은 NamingStrategy를 사용하는 것입니다. https://www.newtonsoft.com/json/help/html/NamingStrategyCamelCase.htm
serializerSettings.Converters.Add(
new StringEnumConverter { NamingStrategy = new CamelCaseNamingStrategy() }
);
'developer tip' 카테고리의 다른 글
첫 번째 선택을 제외한 모든 CSS3 선택자 질문 (0) | 2020.10.07 |
---|---|
Ubuntu에서 Maven이 설치된 위치 (0) | 2020.10.07 |
누수 추상화의 의미? (0) | 2020.10.07 |
PIL을 사용하여 이미지에 텍스트 추가 (0) | 2020.10.07 |
VB.NET에서 클래스를 정적으로 표시 (0) | 2020.10.07 |