Statistics
| Branch: | Revision:

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