C# 如何使用jsonconvert-without-key引号将对象转换为json
我使用jsonconvert将简单对象转换为类似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.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();
}
}