Всякий раз, когда я пытаюсь десериализовать свой json с помощью enum, я продолжаю получать ошибки - PullRequest
1 голос
/ 28 мая 2020

Это мой код перечисления

[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."}

1 Ответ

1 голос
/ 28 мая 2020

Вы не можете десериализовать напрямую до такого перечисления, вам нужен какой-то контейнер. Например:

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);

Что выведет:

Heat

Cool

...