假设我有这个 C# 字典:
Dictionary<string, object> Parameters { get; set; }
然后我在里面放入一些值
Parameters["param1"] = "val1";
Parameters["param2"] = "val2";
最后我将其序列化
var serializer = new JsonSerializer();
var stringWriter = new StringWriter();
var writer = new JsonTextWriter(stringWriter);
writer.QuoteName = false;
writer.QuoteChar = '\'';
serializer.Serialize(writer, Parameters);
(我知道有更快的方法,但我需要引用字符是单引号和不带引号的名称)。
结果符合预期:
{
param1: 'val1',
param2: 'val2'
}
但是,如果我想包含一个带有不带引号值的属性,该值可能代表函数或对象名称,该怎么办?例如,我如何得到这个结果:
{
param1: 'val1',
param2: 'val2',
funcReference: someFunctionName,
objName: valueWithoutQuotes
}
编辑:
由于一些关于我的 JSON 语法的回复说它无效,让我澄清一下为什么我需要不加引号的内容:
我正在使用 Knockoutjs 进行 Javascript 和 HTML 数据绑定(bind)。
因此我需要写这样的东西 -
<div data-bind="something: 'value', event: funcName">...</div>
我需要单引号,这样它就不会弄乱我的 HTML,并且我不会引用属性名称,因为我的个人风格很常见,并且在 Javascript 中非常好(我不使用它来进行数据交换) )。
我需要一些不带引号的值,以便 Knockout 知道它是对函数的引用,否则它会将其视为字符串。 以及我在服务器上生成的函数的名称,以及其他属性和值。
我当然可以手动构建和连接 JSON,但我正在寻找一些自动方法。
谢谢!
最佳答案
(I know there are quicker ways, but I need the quoting char to be a single quote and unquoted names
抱歉,这不是有效的 JSON。在 JSON 中,所有成员都应该用双引号引起来(数字类型除外),并且不能有函数。 .NET 中没有会生成无效 JSON 的 JSON 序列化器。如果您需要生成无效的 JSON,则必须使用字符串连接来手动完成,甚至不要尝试使用序列化程序。
这是grammar有效的 JSON 编码对象。你必须坚持下去。不要仅将术语 JSON 用于任何 javascript 语法,因为 JSON 具有需要遵守的非常具体的规则。
关于c# - 序列化不带引号的属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12554453/