C# 告诉Json.Net在序列化对象时编写单引号而不是双引号

C# 告诉Json.Net在序列化对象时编写单引号而不是双引号,c#,json,serialization,json.net,C#,Json,Serialization,Json.net,调用Newtonsoft.Json.JsonConvert.SerializeObject(myObject)时,我得到的键和值用双引号括起来,如下所示: {“键”:“值”} 我希望它们用单引号括起来,如下所示: {'key':'value'} 可以使用Json.Net吗?是的,这是可能的。如果显式使用JsonTextWriter而不是使用JsonConvert.SerializeObject(),则可以将QuoteChar设置为单个引号 var obj = new { key = "value

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

{“键”:“值”}

我希望它们用单引号括起来,如下所示:

{'key':'value'}


可以使用Json.Net吗?

是的,这是可能的。如果显式使用
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'}
小提琴:


请记住,在JSON中的键和值周围使用单引号被视为非标准(请参阅),这可能会给严格遵守标准的解析器带来问题。

这似乎是一个已经提出的问题。参考这个问题,看看它是否对您有所帮助。这不是一件很好的事情,但它可以工作:
json.Replace(“\”,“\”)
我认为,使用与此类似的解决方案可以实现您的目标。该解决方案将通过创建一个自定义的
JsonConverter
类来编写原始值并用单引号括起来。2018年,您应该避免这种情况——JSON指定您应该使用双引号和许多解析库现在使用单引号将失败(因为严格来说,它不再是格式良好的JSON了)。这太麻烦了。