序列化未引用的属性值



假设我有这个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&HTML数据绑定。因此,我需要写这样的东西——<div data-bind="something: 'value', event: funcName">...</div>

我需要单引号,这样它就不会扰乱我的HTML,我也不会引用属性名称,因为我的个人风格非常常见,在Javascript中也很好(我不把它用于数据交换)。

我需要一些值被取消引号,这样Knockout就会知道它是对函数的引用,否则它会把它当作字符串。以及我在服务器上生成的函数的名称,以及其他属性和值。

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

谢谢!

(我知道有更快的方法,但我需要引用的字符是单引号和无引号名称

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

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

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

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

由于我不能在评论中发布代码,所以作为答案发布

相关内容

  • 没有找到相关文章

最新更新