Скажите json.net писать одиночную кавычку, а не двойную кавычку при сериализации объектов
При вызове Newtonsoft.Json.JsonConvert.SerializeObject(myObject)
я получаю ключи и значения, заключенные в двойные кавычки, такие как:
{"key" : "value"}
Я хотел бы, чтобы они были заключены в одиночные кавычки следующим образом:
{'key' : 'value'}
Можно ли использовать Json.Net?
Ответы
Ответ 1
Да, это возможно. Если вы явно используете JsonTextWriter
вместо использования JsonConvert.SerializeObject()
, вы можете установить QuoteChar
на одну цитату.
var obj = new { key = "value" };
StringBuilder sb = new StringBuilder();
using (StringWriter sw = new StringWriter(sb))
using (JsonTextWriter writer = new JsonTextWriter(sw))
{
writer.QuoteChar = '\'';
JsonSerializer ser = new JsonSerializer();
ser.Serialize(writer, obj);
}
Console.WriteLine(sb.ToString());
Вывод:
{'key':'value'}
Fiddle: https://dotnetfiddle.net/LGRl1k
Имейте в виду, что использование одиночных кавычек вокруг ключей и значений в JSON считается нестандартным (см. JSON.org) и может вызвать проблемы для парсеров, которые строго придерживаются стандарта.
Ответ 2
json = Regex.Replace(json, @"\\\\|\\(""|')|(""|')", match => {
if (match.Groups[1].Value == "\"") return "\""; // Unescape \"
if (match.Groups[2].Value == "\"") return "'"; // Replace " with '
if (match.Groups[2].Value == "'") return "\\'"; // Escape '
return match.Value; // Leave \\ and \' unchanged
});
Выражение соответствует любой из подстрок \\
, \"
, \'
, "
, '
. Он захватывает экранированные кавычки в группу 1 и неэксклюзивные кавычки в группу 2. Затем функция лямбда возвращает соответствующую подстановку для преобразования строки с двойной кавычкой в строку с одной кавычкой.