root / trunk / hammock / src / net35 / Hammock.Tests / Postmark / Converters / UnicodeJsonStringConverter.cs @ 0eea575a
History | View | Annotate | Download (1.5 kB)
1 |
using System; |
---|---|
2 |
using System.Text; |
3 |
using Newtonsoft.Json; |
4 |
|
5 |
namespace Hammock.Tests.Converters |
6 |
{ |
7 |
internal class UnicodeJsonStringConverter : JsonConverter |
8 |
{ |
9 |
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) |
10 |
{ |
11 |
var buffer = new StringBuilder(); |
12 |
buffer.Append("\""); |
13 |
var stringValue = (string)value; |
14 |
foreach (var c in stringValue) |
15 |
{ |
16 |
var code = (int)c; |
17 |
switch (c) |
18 |
{ |
19 |
case '\"': |
20 |
buffer.Append("\\\""); |
21 |
break; |
22 |
case '\\': |
23 |
buffer.Append("\\\\"); |
24 |
break; |
25 |
default: |
26 |
if (code > 127) |
27 |
{ |
28 |
buffer.AppendFormat("\\u{0:x4}", code); |
29 |
} |
30 |
else |
31 |
{ |
32 |
buffer.Append(c); |
33 |
} |
34 |
break; |
35 |
} |
36 |
} |
37 |
buffer.Append("\""); |
38 |
|
39 |
writer.WriteRawValue(buffer.ToString()); |
40 |
} |
41 |
|
42 |
public override object ReadJson(JsonReader reader, Type objectType, object originalValue, JsonSerializer serializer) |
43 |
{ |
44 |
return reader.Value; |
45 |
} |
46 |
|
47 |
public override bool CanConvert(Type objectType) |
48 |
{ |
49 |
return objectType == typeof(string); |
50 |
} |
51 |
} |
52 |
} |
53 |
|
54 |
|