为什么Json.Net将枚举值反序列化为整数并接受为有效?

Hak*_*gan 2 c# enums serialization json json.net

我对Json.NET如何序列化/反序列化枚举感到困惑.

我在JSON Schema中有这个字段:

"MyEnumValue": {
    "type": "string",
    "enum": ["D", "F", "R"]
},
Run Code Online (Sandbox Code Playgroud)

和这个C#代码:

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

public enum MyEnumValue 
{
    D, F, R
}
Run Code Online (Sandbox Code Playgroud)

当我使用这个功能时:

JsonConvert.SerializeObject
Run Code Online (Sandbox Code Playgroud)

创建的Json文本包含:

"MyEnumValue":82
Run Code Online (Sandbox Code Playgroud)

因此,JSON.NET反序列化一个枚举值,该值要求char作为整数,这是char的ASCII值.

我的问题是:*为什么我不通过序列化获得char?

  • (Universal)JSON Schema规则是否正常?

Xia*_*312 7

如果需要[en]将枚举序列化为字符串,请将其添加到属性中:

[JsonProperty(PropertyName = "Enum", Required = Required.Always)]
[JsonConverter(typeof(StringEnumConverter))]
public MyEnumValue MyEnumValue { get; set; } 
Run Code Online (Sandbox Code Playgroud)