diff --git a/Src/Newtonsoft.Json.Tests/Converters/StringEnumConverterTests.cs b/Src/Newtonsoft.Json.Tests/Converters/StringEnumConverterTests.cs index 10081061..cf263219 100644 --- a/Src/Newtonsoft.Json.Tests/Converters/StringEnumConverterTests.cs +++ b/Src/Newtonsoft.Json.Tests/Converters/StringEnumConverterTests.cs @@ -139,6 +139,20 @@ namespace Newtonsoft.Json.Tests.Converters CamelCase } + [JsonConverter(typeof(StringEnumConverter), true, false)] + public enum NotAllowIntegerValuesEnum + { + Foo = 0, + Bar = 1 + } + + [JsonConverter(typeof(StringEnumConverter), true, true)] + public enum AllowIntegerValuesEnum + { + Foo = 0, + Bar = 1 + } + [Test] public void Serialize_CamelCaseFromAttribute() { @@ -153,6 +167,22 @@ namespace Newtonsoft.Json.Tests.Converters Assert.AreEqual(CamelCaseEnum.CamelCase, e); } + [Test] + public void Deserialize_NotAllowIntegerValuesFromAttribute() + { + ExceptionAssert.Throws(() => + { + NotAllowIntegerValuesEnum e = JsonConvert.DeserializeObject(@"""9"""); + }); + } + + [Test] + public void Deserialize_AllowIntegerValuesAttribute() + { + AllowIntegerValuesEnum e = JsonConvert.DeserializeObject(@"""9"""); + Assert.AreEqual(9, (int)e); + } + #if !NET20 [Test] public void NamedEnumDuplicateTest() diff --git a/Src/Newtonsoft.Json/Converters/StringEnumConverter.cs b/Src/Newtonsoft.Json/Converters/StringEnumConverter.cs index ecdab818..2428ed70 100644 --- a/Src/Newtonsoft.Json/Converters/StringEnumConverter.cs +++ b/Src/Newtonsoft.Json/Converters/StringEnumConverter.cs @@ -77,6 +77,16 @@ namespace Newtonsoft.Json.Converters CamelCaseText = camelCaseText; } + /// + /// Initializes a new instance of the class. + /// + /// true if the written enum text will be camel case; otherwise, false. + /// true if integers are allowed when deserializing; otherwise, false. + public StringEnumConverter(bool camelCaseText, bool allowIntegerValues) : this(camelCaseText) + { + AllowIntegerValues = allowIntegerValues; + } + /// /// Writes the JSON representation of the object. ///