diff --git a/Src/Newtonsoft.Json.Tests/JsonConvertTest.cs b/Src/Newtonsoft.Json.Tests/JsonConvertTest.cs
index 3f61d7d9..731d9c37 100644
--- a/Src/Newtonsoft.Json.Tests/JsonConvertTest.cs
+++ b/Src/Newtonsoft.Json.Tests/JsonConvertTest.cs
@@ -580,6 +580,21 @@ namespace Newtonsoft.Json.Tests
Assert.AreEqual(@"""It's a good day\r\n\""sunshine\""""", json);
}
+ [Test]
+ public void ToStringStringEscapeHandling()
+ {
+ string v = "hi " + '\u20AC' + "";
+
+ string json = JsonConvert.ToString(v, '"');
+ Assert.AreEqual(@"""hi " + '\u20AC' + @"""", json);
+
+ json = JsonConvert.ToString(v, '"', StringEscapeHandling.EscapeHtml);
+ Assert.AreEqual(@"""\u003cb\u003ehi " + '\u20AC' + @"\u003c/b\u003e""", json);
+
+ json = JsonConvert.ToString(v, '"', StringEscapeHandling.EscapeNonAscii);
+ Assert.AreEqual(@"""hi \u20ac""", json);
+ }
+
[Test]
public void WriteDateTime()
{
diff --git a/Src/Newtonsoft.Json.Tests/PerformanceTests.cs b/Src/Newtonsoft.Json.Tests/PerformanceTests.cs
index 87afe960..d997f2ca 100644
--- a/Src/Newtonsoft.Json.Tests/PerformanceTests.cs
+++ b/Src/Newtonsoft.Json.Tests/PerformanceTests.cs
@@ -182,7 +182,7 @@ namespace Newtonsoft.Json.Tests
[Test]
public void DeserializeLargeJson()
{
- for (int i = 0; i < 100; i++)
+ for (int i = 0; i < 5; i++)
{
using (var fs = System.IO.File.OpenText("large.json"))
using (JsonTextReader jsonTextReader = new JsonTextReader(fs))
diff --git a/Src/Newtonsoft.Json/JsonConvert.cs b/Src/Newtonsoft.Json/JsonConvert.cs
index e29f4829..ade9cfff 100644
--- a/Src/Newtonsoft.Json/JsonConvert.cs
+++ b/Src/Newtonsoft.Json/JsonConvert.cs
@@ -409,11 +409,6 @@ namespace Newtonsoft.Json
return ToString(value, '"');
}
- public static string ToString(string value, StringEscapeHandling stringEscapeHandling)
- {
- return ToString(value, '"', stringEscapeHandling);
- }
-
///
/// Converts the to its JSON string representation.
///
@@ -425,6 +420,13 @@ namespace Newtonsoft.Json
return ToString(value, delimiter, StringEscapeHandling.Default);
}
+ ///
+ /// Converts the to its JSON string representation.
+ ///
+ /// The value to convert.
+ /// The string delimiter character.
+ /// The string escape handling.
+ /// A JSON string representation of the .
public static string ToString(string value, char delimiter, StringEscapeHandling stringEscapeHandling)
{
if (delimiter != '"' && delimiter != '\'')
diff --git a/Src/Newtonsoft.Json/JsonTextWriter.cs b/Src/Newtonsoft.Json/JsonTextWriter.cs
index dae0acce..771fbac0 100644
--- a/Src/Newtonsoft.Json/JsonTextWriter.cs
+++ b/Src/Newtonsoft.Json/JsonTextWriter.cs
@@ -253,12 +253,7 @@ namespace Newtonsoft.Json
private void UpdateCharEscapeFlags()
{
- if (StringEscapeHandling == StringEscapeHandling.EscapeHtml)
- _charEscapeFlags = JavaScriptUtils.HtmlCharEscapeFlags;
- else if (_quoteChar == '"')
- _charEscapeFlags = JavaScriptUtils.DoubleQuoteCharEscapeFlags;
- else
- _charEscapeFlags = JavaScriptUtils.SingleQuoteCharEscapeFlags;
+ _charEscapeFlags = JavaScriptUtils.GetCharEscapeFlags(StringEscapeHandling, _quoteChar);
}
///
diff --git a/Src/Newtonsoft.Json/Utilities/JavaScriptUtils.cs b/Src/Newtonsoft.Json/Utilities/JavaScriptUtils.cs
index 6a1e5f3c..378db190 100644
--- a/Src/Newtonsoft.Json/Utilities/JavaScriptUtils.cs
+++ b/Src/Newtonsoft.Json/Utilities/JavaScriptUtils.cs
@@ -72,6 +72,17 @@ namespace Newtonsoft.Json.Utilities
private const string EscapedUnicodeText = "!";
+ public static bool[] GetCharEscapeFlags(StringEscapeHandling stringEscapeHandling, char quoteChar)
+ {
+ if (stringEscapeHandling == StringEscapeHandling.EscapeHtml)
+ return HtmlCharEscapeFlags;
+
+ if (quoteChar == '"')
+ return DoubleQuoteCharEscapeFlags;
+
+ return SingleQuoteCharEscapeFlags;
+ }
+
public static bool ShouldEscapeJavaScriptString(string s, bool[] charEscapeFlags)
{
if (s == null)
@@ -230,10 +241,12 @@ namespace Newtonsoft.Json.Utilities
public static string ToEscapedJavaScriptString(string value, char delimiter, bool appendDelimiters, StringEscapeHandling stringEscapeHandling)
{
+ bool[] charEscapeFlags = GetCharEscapeFlags(stringEscapeHandling, delimiter);
+
using (StringWriter w = StringUtils.CreateStringWriter(StringUtils.GetLength(value) ?? 16))
{
char[] buffer = null;
- WriteEscapedJavaScriptString(w, value, delimiter, appendDelimiters, (delimiter == '"') ? DoubleQuoteCharEscapeFlags : SingleQuoteCharEscapeFlags, stringEscapeHandling, ref buffer);
+ WriteEscapedJavaScriptString(w, value, delimiter, appendDelimiters, charEscapeFlags, stringEscapeHandling, ref buffer);
return w.ToString();
}
}