【问题标题】:Whenever I try deserialize my json with enum, I keep on getting errors每当我尝试用枚举反序列化我的 json 时,我都会不断收到错误
【发布时间】:2020-05-27 23:02:31
【问题描述】:

这是我的枚举代码

[JsonConverter(typeof(StringEnumConverter))]
        public enum SystemSwitch
        {
            EmergencyHeat = 0,
            Heat = 1,
            Off = 2,
            Cool = 3,
            Autoheat = 4,
            Autocool = 5,
            SouthernAway = 6,
            Unknown = 7
        }

我要反序列化这个 json

var a = @"{'SystemSwitch': 'Heat','HeatCoolMode': 'Cool'}";
            try
            {
                var parsedEventData = Newtonsoft.Json.JsonConvert.DeserializeObject<SystemSwitch>(a);
                Console.WriteLine(parsedEventData);
            }

但我收到了一个异常提示

{"Unexpected token StartObject when parsing enum. Path '', line 1, position 1."}

如果我尝试使用 json 字符串

string a = "'SystemSwitch':'Cool'";

我明白了

{"Error converting value \"SystemSwitch\" to type 'Testing.Program+SystemSwitch'. Path '', line 1, position 14."}

【问题讨论】:

  • @Jawad 完全不正确,单引号适用于 JSON.Net。问题是 OP 试图直接反序列化为枚举,而不是包含枚举值的类。
  • 根据规范,技术上不允许使用单引号。 JSON.NET 确实允许它们。

标签: c# json deserialization enumeration json-deserialization


【解决方案1】:

您不能直接反序列化为这样的枚举,您需要某种容器。例如:

public class Container
{
    public SystemSwitch SystemSwitch { get; set; }
    public SystemSwitch HeatCoolMode { get; set; }
}

现在你可以这样做了:

var a = @"{'SystemSwitch': 'Heat','HeatCoolMode': 'Cool'}";
var parsedEventData = Newtonsoft.Json.JsonConvert.DeserializeObject<Container>(a);
Console.WriteLine(parsedEventData.SystemSwitch);
Console.WriteLine(parsedEventData.HeatCoolMode);

将输出:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-08
    • 1970-01-01
    • 2016-05-05
    • 1970-01-01
    • 2014-08-13
    • 1970-01-01
    • 2021-09-08
    相关资源
    最近更新 更多