c# - 序列化不带引号的属性值

标签 c# javascript json.net

假设我有这个 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/

相关文章:

c# - foreach 是否从 C# BlockingCollection 中删除?

c# - Action 委托(delegate)可以指向具有返回类型的方法吗?

c# - 在属性中,如何获取它所附加的方法的名称?

javascript - 'opcode -1' 在 Chrome 中是什么意思?

c# - 位图对象可以保存为PNG或JPEG文件格式吗

javascript - 通过JS打开 "Inspect Element"窗口

javascript - 推送并删除数组的重复项

c# - 引用 NHibernate 时出错(从 'IdentitySelectString' 上的 'NHibernate.Dialect.Oracle10gDialect' 获取值时出错。)

c# - 如何在反序列化期间通过构造函数参数将记录器注入(inject)到对象中

C# 使用 XmlReader 获取额外的空白值,但不使用 XmlDocument