using System.Runtime.Serialization;
using Newtonsoft.Json.Converters;
public static void Main()
string json1 = $"{{'Milestone': 'not-specified'}}";
string json2 = $"{{'Milestone': 'percentage'}}";
string json3 = $"{{'Milestone': 'lessons'}}";
var obj1 = JsonConvert.DeserializeObject<DataModel>(json1);
var obj2 = JsonConvert.DeserializeObject<DataModel>(json2);
var obj3 = JsonConvert.DeserializeObject<DataModel>(json3);
Console.WriteLine($"1- ToString: {obj1.Milestone}; Serialized: {JsonConvert.SerializeObject(obj1.Milestone)}");
Console.WriteLine($"2- ToString: {obj2.Milestone}; Serialized: {JsonConvert.SerializeObject(obj2.Milestone)}");
Console.WriteLine($"3- ToString: {obj3.Milestone}; Serialized: {JsonConvert.SerializeObject(obj3.Milestone)}");
Console.WriteLine($"Enum.NotSpecified- ToString: {Milestone.NotSpecified}; Serialized: {JsonConvert.SerializeObject(Milestone.NotSpecified)}");
Console.WriteLine($"Enum.Percentage- ToString: {Milestone.Percentage}; Serialized: {JsonConvert.SerializeObject(Milestone.Percentage)}");
Console.WriteLine($"Enum.Lessons- ToString: {Milestone.Lessons}; Serialized: {JsonConvert.SerializeObject(Milestone.Lessons)}");
public record DataModel(Milestone Milestone) {}
[JsonConverter(typeof(StringEnumConverter))]
[EnumMember(Value = "not-specified")]
[EnumMember(Value = "percentage")]
[EnumMember(Value = "lessons")]