Подтвердить что ты не робот

Скажите json.net писать одиночную кавычку, а не двойную кавычку при сериализации объектов

При вызове Newtonsoft.Json.JsonConvert.SerializeObject(myObject) я получаю ключи и значения, заключенные в двойные кавычки, такие как:

{"key" : "value"}

Я хотел бы, чтобы они были заключены в одиночные кавычки следующим образом:

{'key' : 'value'}

Можно ли использовать Json.Net?

4b9b3361

Ответ 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. Затем функция лямбда возвращает соответствующую подстановку для преобразования строки с двойной кавычкой в ​​строку с одной кавычкой.