C# 如何使用jsonconvert-without-key引号将对象转换为json

C# 如何使用jsonconvert-without-key引号将对象转换为json,c#,json,C#,Json,我使用jsonconvert将简单对象转换为类似json的对象 JsonConvert.SerializeObject(new { label = "MyLabel1" }); 到 但是我想得到没有报价的钥匙 { label: "MyLabel1"} 有没有一种方法可以通过使用jsonconvert将对象转换为不带“key”引号的json?任何需要json或实际JavaScript符号来创建对象(这是json的超集)的库都可以使用引号 但是,如果确实要删除它们,可以将JsonTextWrit

我使用jsonconvert将简单对象转换为类似json的对象

JsonConvert.SerializeObject(new { label = "MyLabel1" });

但是我想得到没有报价的钥匙

{ label: "MyLabel1"}

有没有一种方法可以通过使用jsonconvert将对象转换为不带“key”引号的json?

任何需要json或实际JavaScript符号来创建对象(这是json的超集)的库都可以使用引号

但是,如果确实要删除它们,可以将
JsonTextWriter.QuoteName
设置为false。为此,需要编写一些手动使用的代码
JsonConvert.SerializeObject()

private static string SerializeWithoutQuote(object value)
{
    var serializer = JsonSerializer.Create(null);

    var stringWriter = new StringWriter();

    using (var jsonWriter = new JsonTextWriter(stringWriter))
    {
        jsonWriter.QuoteName = false;

        serializer.Serialize(jsonWriter, value);

        return stringWriter.ToString();
    }
}

我补充回答@svick。对于保存格式,您需要使用StringBuilder For StringWriter

 static string SerializeWithoutQuote(object value)
    {
        var builder = new StringBuilder();
        var serializer = JsonSerializer.Create();
        var stringWriter = new StringWriter(builder);
        using (var jsonWriter = new JsonTextWriter(stringWriter))
        {
            jsonWriter.Formatting = Formatting.Indented;
            jsonWriter.QuoteName = false;
            serializer.Serialize(jsonWriter, value);
            return builder.ToString();
        }
    }

好吧,第二种形式不是JSON。你为什么要这样做?我需要它用于jquery绘图插件“flot”…你确定flot不能正确使用引号吗?@svick是正确的,JSON需要引号键。任何使用JSON的应用程序或库都会接受(并且可能期望)每个键周围的引号。您是否看到了错误或查看了对您有其他建议的文档?我怀疑你已经误诊了你遇到的任何问题。你是对的。。。弗洛特没有双重资格的问题。。。这只是“标签”和“标签”之间的问题。。。在我的对象属性中,使用大写,但flot使用小写…@Spongman
StringWriter.Dispose()
不做任何事情,因此我看不出有任何理由使用
将其放入
中。它今天可能不会做任何事情。但将来可能会。未来验证代码将调用Dispose,不管它如何。@Spongman它会做什么
StringWriter
没有任何非托管资源或类似的资源。它只是内存,这就是GC的用途。您将看到一个实现。你怎么知道它在UWP、mice框架或电话上没有任何作用。不,不要过早地优化(特别是当你在公共论坛上提供建议时——这不是炫耀的地方)。他说它应该被处理掉,所以这就是你应该做的。@Spongman我也在考虑它可能做什么。它是一个
StringWriter
,它将字符写入内存,然后从中构建一个
string
。它可能有哪些非托管资源?这不是优化(它不会使代码更快,它会使代码更短),因此我不认为将其称为“过早优化”有什么意义,也不知道有关过早优化的常见建议是如何应用的。
 static string SerializeWithoutQuote(object value)
    {
        var builder = new StringBuilder();
        var serializer = JsonSerializer.Create();
        var stringWriter = new StringWriter(builder);
        using (var jsonWriter = new JsonTextWriter(stringWriter))
        {
            jsonWriter.Formatting = Formatting.Indented;
            jsonWriter.QuoteName = false;
            serializer.Serialize(jsonWriter, value);
            return builder.ToString();
        }
    }