본문 바로가기
.NET/ASP.NET

Enum 형을 JSON 응답으로 String 으로 표시하고자 할때..

by ironman! 2023. 12. 4.

Web API 를 만든후 아래와 같은 클래스로 응답을 지정했더니 Enum 형이 숫자로 표기되는 문제가 발생하였다. 원하는 방법은 Enum 형에 지정된 값이 아닌 명이 표시되길 원했던 것이다.

 

응답 클래스

public class ResponseModel    
{
    public ResponseModel(ResponseState rs)
    {
        this.State = rs;
    }

    public ResponseModel()
    {
    }

    public ResponseState State { get; set; }
            
    public Object Result { get; set; }
}

public enum ResponseState
{
    success,
    failure
}

 

응답 결과

{
    "state": 1,
    "result": {
        "accessToken": "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJEUlNDb2RlIjoiMjAwNjciLCJSZXF1c3REYXRlIjoiMjAyMzEyMDEiLCJDb21wYW55Q29kZSI6IjEwMDAiLCJCdXNpbmVzc051bWJlciI6IjEwNDMyODg5MDciLCJBdWRpZW5jZSI6Imh0dHBzOi8vbG9jYWxob3N0OjcxNjIiLCJleHAiOjE3MDE3MTE2NjIsImlzcyI6Imh0dHBzOi8vbG9jYWxob3N0OjcxNjIiLCJhdWQiOiJodHRwczovL2xvY2FsaG9zdDo3MTYyIn0.1QqiV7cgxGaQlMEqqnFcqFwiAKSo5tNo1-uSGnbtqGVLmXkfWy8dFGmAKXAisBXDL_8zYBINBZZGoGr8-8abzw",
        "expiration": 21600,
        "type": "bearer"
    }
}

 

내가 원하는 그림은 "state": "success" 가 전달되는 것이였다. 그래서 다음과 같이 변경하였더니 원하던 결과를 얻게 되었다.

 

변경 부분

  • System.Text.Json.Serialization 를 사용 시에는 아래와 같이 지정
[JsonConverter(typeof(JsonStringEnumConverter))]
public ResponseState State { get; set; }

 

  •  Newtonsoft.Json 을 사용 시에는 아래와 같이 지정
[JsonConverter(typeof(StringEnumConverter))]  
public ResponseState State { get; set; }

 

수정 결과

{
    "state": "success",
    "result": {
        "accessToken": "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJEUlNDb2RlIjoiMjAwNjciLCJSZXF1c3REYXRlIjoiMjAyMzEyMDEiLCJDb21wYW55Q29kZSI6IjEwMDAiLCJCdXNpbmVzc051bWJlciI6IjEwNDMyODg5MDciLCJBdWRpZW5jZSI6Imh0dHBzOi8vbG9jYWxob3N0OjcxNjIiLCJleHAiOjE3MDE3MTE2NjIsImlzcyI6Imh0dHBzOi8vbG9jYWxob3N0OjcxNjIiLCJhdWQiOiJodHRwczovL2xvY2FsaG9zdDo3MTYyIn0.1QqiV7cgxGaQlMEqqnFcqFwiAKSo5tNo1-uSGnbtqGVLmXkfWy8dFGmAKXAisBXDL_8zYBINBZZGoGr8-8abzw",
        "expiration": 21600,
        "type": "bearer"
    }
}

 

참고 아티클 : https://code-maze.com/csharp-serialize-enum-to-string/