programing

어떻게 Json에게 말할까?모든 Enum에 StringEnumConverter를 적용하려면 Net 글로벌하게

skycolor 2023. 3. 23. 22:34
반응형

어떻게 Json에게 말할까?모든 Enum에 StringEnumConverter를 적용하려면 Net 글로벌하게

열거를 문자열 표현으로 역직렬화하거나 json.net에서 역직렬화하려고 합니다.프레임워크에 적용하도록 지시할 수 있는 유일한 방법은StringEnumConverter다음과 같이 문제의 속성에 주석을 붙입니다.

[JsonConverter(typeof(StringEnumConverter))]
public virtual MyEnums MyEnum { get; set; }

다만, 제 사용 예에서는, json.net 를 글로벌하게 설정해 두면, 모든 열거가, 를 사용해 최적화(해제)되도록 하는 것이 훨씬 편리합니다.StringEnumConverter추가 주석이 필요 없습니다.

예를 들어 세관의 도움을 받아 그렇게 할 수 있는 방법이 있습니까?JsonSerializerSettings?

를 추가합니다.StringEnumConverter에게JsonSerializerSettings컬렉션을 변환합니다.

문서:JsonConverters를 사용한 시리얼화


시리얼라이저가 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에서 최신이 아닙니다.새로운 방법은 Naming Strategy를 사용하는 것입니다.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

반응형