0

enum 등록 정보를 포함하고 JavaScriptSerializer를 사용하여 객체를 직렬화하는 클래스입니다. JSON을 serialize 할 때 인덱스 값 대신 텍스트가 표시됩니다. 예를 들어 :JavaScriptSerializer가 enum과 함께 작동하지 않을 때 인덱스 값 지정

public enum LocationType 
    { 
     [Description("Description 1") ,EnumMember(Value = "EST")] 
     EST = 1, 
     [Description("Description 2"), EnumMember(Value = "INTNS")] 
     INTNS = 2, 
     [Description("Description 3"), EnumMember(Value = "INTS")] 
     INTS = 3 
    } 
public class Details 
    { 
     public LocationType? LocationType { get; set; } 
    } 

List<Details> obj = new List<Details>(); 
      obj.Add(new Details() { LocationType = LocationType.INTNS }); 
      obj.Add(new Details() { LocationType = LocationType.INTS }); 
      obj.Add(new Details() { LocationType = LocationType.EST }); 
      obj.Add(new Details() { LocationType = LocationType.INTS }); 
      obj.Add(new Details() { LocationType = LocationType.EST }); 
      obj.Add(new Details() { LocationType = LocationType.EST }); 
      obj.Add(new Details() { LocationType = LocationType.INTS }); 
      obj.Add(new Details() { LocationType = LocationType.EST }); 

     return obj; 

실제 JSON 결과 :

{ "LocationType ": 2 } 

예상 JSON 결과 :

{ "LocationType ": "INTNS" } 
+0

Enum에는 LocationType.INTNS.Value를 사용할 수 없습니다. LocationType.INTNS를 사용할 때 INTNS를 반환합니다. – karthik

+1

Json.Net을 사용하면 훨씬 좋습니다. MS 자체조차 JavaScriptSerialzer를 요즘 Json.Net보다 우선 사용 중지했습니다 – Liam

+0

newtonsoft를 사용할 때 예상대로 잘 작동하지만이 경우 javascript serializer에서이 경우 발생해야합니다. – karthik

답변

0

난 그냥 테스트, 당신은 값 열거를 할당하는 의심 배 좋아 . 및 int 대신 "string"값에 할당하려는 경우. 그래서 https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/enumeration-types-in-data-contracts

이 같은 그것을 할 경우 작동합니다 :

public enum LocationType 
{ 
    [Description("Description 1") ,EnumMember(Value = "EST")] 
    EST, 
    [Description("Description 2"), EnumMember(Value = "INTNS")] 
    INTNS, 
    [Description("Description 3"), EnumMember(Value = "INTS")] 
    INTS 
} 

당신은에 ToString()를 호출 할 수있는 문서에 표시된대로 int로 그것을 설정해야 해달라고 enum 값을 사용할 때 :

LocationType.INTNS.ToString(); 
+0

이것은 적절한 색인이 필요한 적절한 해결책이 아닙니다. – karthik

+0

newtonsoft를 사용할 때 예상대로 잘 작동하지만 javascriptserializer에서이 경우 발생해야합니다. – karthik