developer tip

모든 열거 형에 StringEnumConverter를 적용하도록 Json.Net에 전역 적으로 알리는 방법

copycodes 2020. 10. 7. 07:48
반응형

모든 열거 형에 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;
});

( http://james.newtonking.com/archive/2013/05/08/json-net-5-0-release-5-defaultsettings-and-extension-data 참조 )


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() }
);

참고 URL : https://stackoverflow.com/questions/7427909/how-to-tell-json-net-globally-to-apply-the-stringenumconverter-to-all-enums

반응형