2017-09-28 5 views
0

Json.NET에서 열거 형을 serialize/deserialize하는 방법에 대해 혼란스러워합니다.왜 Json.Net은 정수로 enum 값을 deserialize하고 유효한 것으로 받아들입니까?

내 JSON 스키마에이 필드가 :이 기능을 사용하면

[JsonProperty(PropertyName = "MyEnumValue", Required = Required.Always)] 
public MyEnumValue MyEnumValue { get; set; } 

public enum MyEnumValue 
{ 
    D, F, R 
} 

가 :

"MyEnumValue": { 
    "type": "string", 
    "enum": ["D", "F", "R"] 
}, 

이 C# 코드가

JsonConvert.SerializeObject 

을 생성 된 JSON 텍스트에 포함 된 이 :

"MyEnumValue":82 

그래서 JSON.NET은 char을 char의 ASCII 값인 정수로 예상하는 enum 값을 deserialize합니다.

내 질문 : * 왜 내가 직렬화를 통해서만 문자를 얻지 못합니까?

  • (유니버설) JSON 스키마 규칙은 정상입니까?
+2

- 당신의 열거가 일련의 정수로 정의된다. 왜 당신은 비 직렬화 (deserializing)에 의해'char'를 얻어야한다고 생각합니까? – xxbbcc

+1

이 질문은 혼란 스럽습니다. 'JsonConvert.DeserializeObject'는 JSON 문자열을 객체로 변환하여 JSON을 생성하지 않으므로' "MyEnumValue": 82'를 생성하지 않습니다. MyEnumValue의 값을 명시 적으로 설정하지 않았으므로 암시 적으로 0에서 2까지의 값이 지정됩니다. 기본적으로 82로 직렬화되지 않습니다. –

+1

'(MyEnumValue) 'R'== 82' –

답변

3

는 속성이 추가, 문자열로 열거를 직렬화 [드]로해야하는 경우 : 내가 여기서 뭔가 빠진해야

[JsonProperty(PropertyName = "Enum", Required = Required.Always)] 
[JsonConverter(typeof(StringEnumConverter))] 
public MyEnumValue MyEnumValue { get; set; } 
+0

이것은 받아 들여진 대답이어야합니다. 그것을 사용하고 잘 작동합니다. – Lorien

+0

아니요 .. 작동하지 않습니다. Json은 잘못된 값을 받아들입니다. 시도해보십시오. – Revious

+0

@Revious Json.net은 가능한 한 최선을 다해 변환하려고 시도 할 것입니다. '{Enum : 312}, {Enum : invalid_value}'또는'(MyEnumValue) 312'와 같은 잘못된 값을 방지하려면 https://www.newtonsoft.com/json/help/html의 유효성을 검사해야합니다. /JsonSchema.htm – Xiaoy312