Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit d74be3b

Browse files
committed
Merge pull request #372 from dixon/master
Control chars should be escaped in JSON
2 parents 2e3c949 + 7606055 commit d74be3b

File tree

2 files changed

+11
-1
lines changed

2 files changed

+11
-1
lines changed

src/ServiceStack.Text/Json/JsonUtils.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,8 @@ public static void WriteString(TextWriter writer, string value)
8484
continue;
8585
}
8686

87-
if (JsConfig.EscapeUnicode)
87+
// http://json.org/ spec requires any control char to be escaped
88+
if (JsConfig.EscapeUnicode || char.IsControl(value[i]))
8889
{
8990
// Default, turn into a \uXXXX sequence
9091
IntToHex(value[i], hexSeqBuffer);

tests/ServiceStack.Text.Tests/JsonTests/EscapedCharsTests.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,16 @@ public void Can_deserialize_unicode_with_escape()
252252
Assert.That(fromJson.Name, Is.EqualTo("JříАбвĀašū"));
253253
}
254254

255+
[Test]
256+
public void Can_serialize_array_of_control_chars_and_unicode()
257+
{
258+
// we want to ensure control chars are escaped, but other unicode is fine to be serialized
259+
Assert.IsFalse(JsConfig.EscapeUnicode, "for this test, JsConfig.EscapeUnicode must be false");
255260

261+
var array = new[] { ((char)0x18).ToString(), "Ω" };
262+
var json = JsonSerializer.SerializeToString(array);
263+
Assert.That(json, Is.EqualTo(@"[""\u0018"",""Ω""]"));
264+
}
256265

257266
public class Model
258267
{

0 commit comments

Comments
 (0)