This commit is contained in:
James Newton-King
2014-09-25 21:04:24 +12:00
parent 2faf5059bf
commit 6a22345e28
5 changed files with 38 additions and 13 deletions
@@ -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))
+7 -5
View File
@@ -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 != '\'')
+1 -6
View File
@@ -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();
}
}