using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Converters;
public static void Main()
var str = @"{ ""Enum1"": ""Bar1"", ""VariableEnum"": ""Bar3"" }";
var serializer = new JsonSerializer();
serializer.Converters.Add(new StringEnumConverter());
var document = JsonConvert.DeserializeObject<Document>(str);
Enum2 enum2Value = document.VariableEnum.ToObject<Enum2>(serializer);
Console.WriteLine("Enum 2 value: {0}", enum2Value);
Enum3 enum3Value = document.VariableEnum.ToObject<Enum3>(serializer);
Console.WriteLine("Enum 3 value: {0}", enum3Value);
public enum Enum1 { Foo1 = 1, Bar1 = 2 };
public enum Enum2 { Foo2 = 1, Bar2 = 2 };
public enum Enum3 { Foo3 = 1, Bar3 = 2 };
public Enum1 Enum1 { get; set; }
public JToken VariableEnum { get; set; }