Прежде всего я нахожу идею реализовать сериализацию вручную не очень хорошей. Вы должны делать это чаще всего только для учебы или у вас есть другая очень важная причина, по которой вы не можете использовать стандартные классы .NET (например, использование должно использовать .NET 1.0-3.0 и не выше).
Теперь вернемся к вашему коду. Результаты, которые вы производите в настоящее время не в формате JSON. Вы должны поместить имя свойства и значение свойства в двойные квоты:
{ "propName" : "*** \"Hello World!\" ***" }
Как вы можете прочитать на http://www.json.org/ двойную квоту не только для символа, который должен быть экранирован. Символ обратной косой черты также должен экранироваться. Вы можете подтвердить результаты JSON на http://www.jsonlint.com/.
Если вы осуществляете десериализацию также вручную, вы должны знать, что есть еще символы, которые могут быть аббревиатурно экранированными до \"
и \\
: \/
, \ b, \ f, \ n, \ r, \ t и \ u после 4 шестнадцатеричных цифр.
Как я написал в начале своего ответа, лучше использовать стандартные классы .NET, такие как DataContractJsonSerializer или JavaScriptSerializer . Если вам нужно использовать .NET 2.0 и выше, вы можете использовать Json.NET .