private string ParseString()
{
StringBuilder s = new StringBuilder();
char c;
// ditch opening quote
this.json.Read();
bool parsing = true;
while (parsing)
{
if (this.json.Peek() == -1)
{
parsing = false;
break;
}
c = this.NextChar;
switch (c)
{
case '"':
parsing = false;
break;
case '\\':
if (this.json.Peek() == -1)
{
parsing = false;
break;
}
c = this.NextChar;
switch (c)
{
case '"':
case '\\':
case '/':
s.Append(c);
break;
case 'b':
s.Append('\b');
break;
case 'f':
s.Append('\f');
break;
case 'n':
s.Append('\n');
break;
case 'r':
s.Append('\r');
break;
case 't':
s.Append('\t');
break;
case 'u':
var hex = new StringBuilder();
for (int i = 0; i < 4; i++)
{
hex.Append(this.NextChar);
}
s.Append((char)Convert.ToInt32(hex.ToString(), 16));
break;
}
break;
default:
s.Append(c);
break;
}
}
return s.ToString();
}