diff --git a/Doc/Introduction.aml b/Doc/Introduction.aml
index fbef904a..a0ecb8e0 100644
--- a/Doc/Introduction.aml
+++ b/Doc/Introduction.aml
@@ -83,27 +83,14 @@ and write from your objects.
_blank
,
an async library for building real-time, multi-user interactive web applications; and
- ASP.NET Web API
- http://www.asp.net/web-api
+ ASP.NET Core
+ http://www.asp.net
_blank
,
- Microsoft's HTTP service framework.
+ Microsoft's web app and service framework.
-
- Donate
- Json.NET is a personal open source project. Started in 2006, I have put thousands of hours into adding, refining, and tuning Json.NET with the goal of making it not just the best JSON serializer for .NET, but the best serializer for any computer language. I need your
- help to achieve this.
-
-
-
-
-
-
-
-
-
diff --git a/Src/Newtonsoft.Json.Tests/Converters/RegexConverterTests.cs b/Src/Newtonsoft.Json.Tests/Converters/RegexConverterTests.cs
index 71a8cb3e..64c47947 100644
--- a/Src/Newtonsoft.Json.Tests/Converters/RegexConverterTests.cs
+++ b/Src/Newtonsoft.Json.Tests/Converters/RegexConverterTests.cs
@@ -126,6 +126,67 @@ namespace Newtonsoft.Json.Tests.Converters
Assert.AreEqual(RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture, r.Regex.Options);
}
+ [Test]
+ public void DeserializeStringRegex()
+ {
+ string json = @"{
+ ""Regex"": ""\/abc\/""
+}";
+
+ RegexTestClass c = JsonConvert.DeserializeObject(json, new JsonSerializerSettings
+ {
+ Converters = { new RegexConverter() }
+ });
+
+ Assert.AreEqual("abc", c.Regex.ToString());
+ Assert.AreEqual(RegexOptions.None, c.Regex.Options);
+ }
+
+ [Test]
+ public void DeserializeStringRegex_NoStartSlash_Error()
+ {
+ string json = @"{
+ ""Regex"": ""abc\/""
+}";
+
+ ExceptionAssert.Throws(
+ () => JsonConvert.DeserializeObject(json, new JsonSerializerSettings
+ {
+ Converters = { new RegexConverter() }
+ }),
+ "Regex pattern must be enclosed by slashes. Path 'Regex', line 2, position 18.");
+ }
+
+ [Test]
+ public void DeserializeStringRegex_NoEndSlash_Error()
+ {
+ string json = @"{
+ ""Regex"": ""\/abc""
+}";
+
+ ExceptionAssert.Throws(
+ () => JsonConvert.DeserializeObject(json, new JsonSerializerSettings
+ {
+ Converters = {new RegexConverter()}
+ }),
+ "Regex pattern must be enclosed by slashes. Path 'Regex', line 2, position 18.");
+ }
+
+ [Test]
+ public void DeserializeStringRegex_NoStartAndEndSlashes_Error()
+ {
+ string json = @"{
+ ""Regex"": ""\/abc""
+}";
+
+ ExceptionAssert.Throws(
+ () => JsonConvert.DeserializeObject(json, new JsonSerializerSettings
+ {
+ Converters = { new RegexConverter() }
+ }),
+ "Regex pattern must be enclosed by slashes. Path 'Regex', line 2, position 18.");
+ }
+
#pragma warning disable 618
[Test]
public void SerializeToBson()
diff --git a/Src/Newtonsoft.Json.Tests/Serialization/ContractResolverTests.cs b/Src/Newtonsoft.Json.Tests/Serialization/ContractResolverTests.cs
index ebd7ddf3..d34b6cfe 100644
--- a/Src/Newtonsoft.Json.Tests/Serialization/ContractResolverTests.cs
+++ b/Src/Newtonsoft.Json.Tests/Serialization/ContractResolverTests.cs
@@ -534,11 +534,11 @@ namespace Newtonsoft.Json.Tests.Serialization
string iPersonJson = JsonConvert.SerializeObject(employee, Formatting.Indented,
new JsonSerializerSettings { ContractResolver = new IPersonContractResolver() });
- StringAssert.AreEqual(@"{
- ""FirstName"": ""Maurice"",
- ""LastName"": ""Moss"",
- ""BirthDate"": ""1977-12-30T01:01:01Z""
-}", iPersonJson);
+ JObject o = JObject.Parse(iPersonJson);
+
+ Assert.AreEqual("Maurice", (string)o["FirstName"]);
+ Assert.AreEqual("Moss", (string)o["LastName"]);
+ Assert.AreEqual(new DateTime(1977, 12, 30, 1, 1, 1, DateTimeKind.Utc), (DateTime)o["BirthDate"]);
}
[Test]
diff --git a/Src/Newtonsoft.Json/Converters/RegexConverter.cs b/Src/Newtonsoft.Json/Converters/RegexConverter.cs
index 40e9022a..719a06ad 100644
--- a/Src/Newtonsoft.Json/Converters/RegexConverter.cs
+++ b/Src/Newtonsoft.Json/Converters/RegexConverter.cs
@@ -150,14 +150,23 @@ namespace Newtonsoft.Json.Converters
private object ReadRegexString(JsonReader reader)
{
string regexText = (string)reader.Value;
- int patternOptionDelimiterIndex = regexText.LastIndexOf('/');
- string patternText = regexText.Substring(1, patternOptionDelimiterIndex - 1);
- string optionsText = regexText.Substring(patternOptionDelimiterIndex + 1);
+ if (regexText.Length > 0 && regexText[0] == '/')
+ {
+ int patternOptionDelimiterIndex = regexText.LastIndexOf('/');
- RegexOptions options = MiscellaneousUtils.GetRegexOptions(optionsText);
+ if (patternOptionDelimiterIndex > 0)
+ {
+ string patternText = regexText.Substring(1, patternOptionDelimiterIndex - 1);
+ string optionsText = regexText.Substring(patternOptionDelimiterIndex + 1);
- return new Regex(patternText, options);
+ RegexOptions options = MiscellaneousUtils.GetRegexOptions(optionsText);
+
+ return new Regex(patternText, options);
+ }
+ }
+
+ throw JsonSerializationException.Create(reader, "Regex pattern must be enclosed by slashes.");
}
private Regex ReadRegexObject(JsonReader reader, JsonSerializer serializer)