【问题标题】:Tell Json.Net to write a single-quote rather than a double quote when serializing objects告诉 Json.Net 在序列化对象时编写单引号而不是双引号
【发布时间】:2019-12-11 01:36:23
【问题描述】:

当调用 Newtonsoft.Json.JsonConvert.SerializeObject(myObject) 时,我得到的键和值用双引号括起来,如下所示:

{"key" : "value"}

我希望它们像这样用单引号括起来:

{'key' : 'value'}

是否可以使用 Json.Net?

【问题讨论】:

  • 这似乎是一个已经问过的问题。 stackoverflow.com/questions/13541998/… 。请参考该问题,看看它是否对您有帮助。
  • 不是什么漂亮的东西,但它确实有效:json.Replace("\"", "\'");
  • 我认为您可以使用类似于answer 的解决方案来实现您的目标。该解决方案将通过创建一个自定义 JsonConverter 类,该类写入原始值并用单引号括起来。
  • 在 2018 年,你应该避免这种情况——JSON 指定你应该使用双引号,现在许多解析库会因为单引号而失败(因为严格来说,它不再是格式良好的 JSON)。

标签: c# json serialization 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'}

小提琴:https://dotnetfiddle.net/LGRl1k

请记住,在 JSON 中使用单引号将键和值括起来被认为是不标准的(请参阅 JSON.org),并且可能会导致严格遵守标准的解析器出现问题。

【讨论】:

  • 太麻烦了。
猜你喜欢
  • 2011-05-18
  • 1970-01-01
  • 1970-01-01
  • 2020-05-26
  • 1970-01-01
  • 1970-01-01
  • 2011-12-08
  • 2017-07-09
  • 1970-01-01
相关资源
最近更新 更多