序列化不带引号的属性值

时间:2012-09-23 17:19:33

标签: 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 for Javascript&amp; HTML数据绑定。 因此我需要写这样的东西 -     <div data-bind="something: 'value', event: funcName">...</div>

我需要单引号以便它不会弄乱我的HTML并且我不会引用属性名称,因为我的个人风格很常见并且在Javascript中非常好(我没有用它来进行数据交换) )。

我需要一些值不加引号,以便Knockout知道它是对函数的引用,否则它会将它视为字符串。 以及我在服务器上生成的函数的名称,以及其他属性和值。

我当然可以手动构建和连接JSON,但我正在寻找一些自动方式。

谢谢!

2 个答案:

答案 0 :(得分:2)

  

(我知道有更快的方法,但我需要引用字符为a   单引号和不带引号的名称

抱歉,这不是有效的JSON。在JSON中,所有成员都应该是双引号(数字类型除外),你不能有函数。 .NET中没有JSON序列化程序会生成无效的JSON。如果您需要生成无效的JSON,则必须使用字符串连接手动完成,甚至不要尝试使用序列化程序。

这是有效JSON编码对象的grammar。你必须坚持下去。不要只使用术语 JSON 来表示任何javascript语法,因为JSON具有非常特殊的规则需要遵守。

答案 1 :(得分:0)

在上面添加我的评论,理想情况下应该是

{  
   "param1": "val1",  
   "param2": "val2", 
   "funcReference": "someFunctionName", 
   "objName": "valueWithoutQuotes" 
} 

作为答案发帖,因为我无法在评论中发布代码