private void SerializeString(string str)
{
this.builder.Append('\"');
char[] charArray = str.ToCharArray();
foreach (var c in charArray)
{
switch (c)
{
case '"':
this.builder.Append("\\\"");
break;
case '\\':
this.builder.Append("\\\\");
break;
case '\b':
this.builder.Append("\\b");
break;
case '\f':
this.builder.Append("\\f");
break;
case '\n':
this.builder.Append("\\n");
break;
case '\r':
this.builder.Append("\\r");
break;
case '\t':
this.builder.Append("\\t");
break;
default:
int codepoint = Convert.ToInt32(c);
if ((codepoint >= 32) && (codepoint <= 126))
{
this.builder.Append(c);
}
else
{
this.builder.Append("\\u" + Convert.ToString(codepoint, 16).PadLeft(4, '0'));
}
break;
}
}
this.builder.Append('\"');
}