-Bug fix
This commit is contained in:
@@ -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 = "<b>hi " + '\u20AC' + "</b>";
|
||||
|
||||
string json = JsonConvert.ToString(v, '"');
|
||||
Assert.AreEqual(@"""<b>hi " + '\u20AC' + @"</b>""", json);
|
||||
|
||||
json = JsonConvert.ToString(v, '"', StringEscapeHandling.EscapeHtml);
|
||||
Assert.AreEqual(@"""\u003cb\u003ehi " + '\u20AC' + @"\u003c/b\u003e""", json);
|
||||
|
||||
json = JsonConvert.ToString(v, '"', StringEscapeHandling.EscapeNonAscii);
|
||||
Assert.AreEqual(@"""<b>hi \u20ac</b>""", json);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void WriteDateTime()
|
||||
{
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -409,11 +409,6 @@ namespace Newtonsoft.Json
|
||||
return ToString(value, '"');
|
||||
}
|
||||
|
||||
public static string ToString(string value, StringEscapeHandling stringEscapeHandling)
|
||||
{
|
||||
return ToString(value, '"', stringEscapeHandling);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Converts the <see cref="String"/> to its JSON string representation.
|
||||
/// </summary>
|
||||
@@ -425,6 +420,13 @@ namespace Newtonsoft.Json
|
||||
return ToString(value, delimiter, StringEscapeHandling.Default);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Converts the <see cref="String"/> to its JSON string representation.
|
||||
/// </summary>
|
||||
/// <param name="value">The value to convert.</param>
|
||||
/// <param name="delimiter">The string delimiter character.</param>
|
||||
/// <param name="stringEscapeHandling">The string escape handling.</param>
|
||||
/// <returns>A JSON string representation of the <see cref="String"/>.</returns>
|
||||
public static string ToString(string value, char delimiter, StringEscapeHandling stringEscapeHandling)
|
||||
{
|
||||
if (delimiter != '"' && delimiter != '\'')
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user