Skip to content

Commit 7673a18

Browse files
committed
-Changed StringEnumConverter.AllowIntegerValues to also reject writing enum values with no name
1 parent 937b25b commit 7673a18

16 files changed

+103
-861
lines changed

Src/Newtonsoft.Json.Portable40.sln

Lines changed: 0 additions & 28 deletions
This file was deleted.

Src/Newtonsoft.Json.Tests/Converters/StringEnumConverterTests.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -612,12 +612,21 @@ public void AllowIntegerValueAndStringNumber()
612612
{
613613
JsonSerializationException ex = ExceptionAssert.Throws<JsonSerializationException>(() =>
614614
{
615-
JsonConvert.DeserializeObject<StoreColor>("\"1\"", new StringEnumConverter {AllowIntegerValues = false});
615+
JsonConvert.DeserializeObject<StoreColor>("\"1\"", new StringEnumConverter { AllowIntegerValues = false });
616616
});
617617

618618
Assert.AreEqual("Integer string '1' is not allowed.", ex.InnerException.Message);
619619
}
620620

621+
[Test]
622+
public void AllowIntegerValueAndNonNamedValue()
623+
{
624+
ExceptionAssert.Throws<JsonSerializationException>(() =>
625+
{
626+
JsonConvert.SerializeObject((StoreColor)999, new StringEnumConverter { AllowIntegerValues = false });
627+
}, "Integer value 999 is not allowed. Path ''.");
628+
}
629+
621630
public enum EnumWithDifferentCases
622631
{
623632
M,

Src/Newtonsoft.Json.Tests/Converters/XmlNodeConverterTest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1052,7 +1052,7 @@ public void OtherElementDataTypes()
10521052
[Test]
10531053
public void NoRootObject()
10541054
{
1055-
ExceptionAssert.Throws<JsonSerializationException>(() => { XmlDocument newDoc = (XmlDocument)JsonConvert.DeserializeXmlNode(@"[1]"); }, "XmlNodeConverter can only convert JSON that begins with an object.");
1055+
ExceptionAssert.Throws<JsonSerializationException>(() => { XmlDocument newDoc = (XmlDocument)JsonConvert.DeserializeXmlNode(@"[1]"); }, "XmlNodeConverter can only convert JSON that begins with an object. Path '', line 1, position 1.");
10561056
}
10571057

10581058
[Test]

Src/Newtonsoft.Json.Tests/Newtonsoft.Json.Tests.Portable40.csproj

Lines changed: 0 additions & 431 deletions
This file was deleted.

Src/Newtonsoft.Json.Tests/Newtonsoft.Json.Tests.Portable40.project.json

Lines changed: 0 additions & 12 deletions
This file was deleted.

Src/Newtonsoft.Json.Tests/Newtonsoft.Json.Tests.Roslyn.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
<DebugType Condition="'$(TargetFramework)' != '' AND '$(TargetFramework)' != 'netcoreapp1.0'">Full</DebugType>
1919
</PropertyGroup>
2020
<ItemGroup>
21+
<None Remove="**\*.orig" />
2122
<Compile Condition="'$(TargetFramework)' != '' AND '$(TargetFramework)' != 'net45'" Remove="Benchmarks\**" />
2223
<None Include="large.json">
2324
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>

Src/Newtonsoft.Json/Converters/StringEnumConverter.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,11 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
9595

9696
if (char.IsNumber(enumName[0]) || enumName[0] == '-')
9797
{
98+
if (!AllowIntegerValues)
99+
{
100+
throw JsonSerializationException.Create(null, writer.ContainerPath, "Integer value {0} is not allowed.".FormatWith(CultureInfo.InvariantCulture, enumName), null);
101+
}
102+
98103
// enum value has no name so write number
99104
writer.WriteValue(value);
100105
}

Src/Newtonsoft.Json/Converters/XmlNodeConverter.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1617,7 +1617,7 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist
16171617
case JsonToken.StartObject:
16181618
break;
16191619
default:
1620-
throw new JsonSerializationException("XmlNodeConverter can only convert JSON that begins with an object.");
1620+
throw JsonSerializationException.Create(reader, "XmlNodeConverter can only convert JSON that begins with an object.");
16211621
}
16221622

16231623
XmlNamespaceManager manager = new XmlNamespaceManager(new NameTable());
@@ -1629,7 +1629,7 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist
16291629
{
16301630
if (objectType != typeof(XDocument) && objectType != typeof(XElement))
16311631
{
1632-
throw new JsonSerializationException("XmlNodeConverter only supports deserializing XDocument or XElement.");
1632+
throw JsonSerializationException.Create(reader, "XmlNodeConverter only supports deserializing XDocument or XElement.");
16331633
}
16341634

16351635
XDocument d = new XDocument();
@@ -1642,7 +1642,7 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist
16421642
{
16431643
if (objectType != typeof(XmlDocument))
16441644
{
1645-
throw new JsonSerializationException("XmlNodeConverter only supports deserializing XmlDocuments");
1645+
throw JsonSerializationException.Create(reader, "XmlNodeConverter only supports deserializing XmlDocuments");
16461646
}
16471647

16481648
XmlDocument d = new XmlDocument();
@@ -1656,9 +1656,9 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist
16561656
}
16571657
#endif
16581658

1659-
if (document == null || rootNode == null)
1659+
if (document == null || rootNode == null)
16601660
{
1661-
throw new JsonSerializationException("Unexpected type when converting XML: " + objectType);
1661+
throw JsonSerializationException.Create(reader, "Unexpected type when converting XML: " + objectType);
16621662
}
16631663

16641664
if (!string.IsNullOrEmpty(DeserializeRootElementName))

Src/Newtonsoft.Json/Linq/JValue.Async.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ public override Task WriteToAsync(JsonWriter writer, CancellationToken cancellat
130130
return writer.WriteValueAsync((Uri)_value, cancellationToken);
131131
}
132132

133-
throw MiscellaneousUtils.CreateArgumentOutOfRangeException("TokenType", _valueType, "Unexpected token type.");
133+
throw MiscellaneousUtils.CreateArgumentOutOfRangeException(nameof(Type), _valueType, "Unexpected token type.");
134134
}
135135
}
136136
}

0 commit comments

Comments
 (0)