【发布时间】:2016-12-08 22:22:57
【问题描述】:
我需要生成一个 JSON 文档,它将由设备上的 SSI 机制解析。该文档实际上是一个 json 序列化字典。为了简单起见,假设它应该如下所示:
var x = new Dictionary<string,object>
{
["A"]=new {x = "<!-- ?A.x -->"},
["B"]=new {x = "<!-- ?B.x -->"}
};
JsonConvert.SerializeObject(x).Dump();
在 LinqPad 中产生:
{"A":{"x":"<!-- ?A.x -->"},"B":{"x":"<!-- ?B.x -->"}}
但实际上那些“x”字段是数字,当从设备中获取时,它们将包含数字。所以我需要在 C# 端的字符串字段值周围不带引号的情况下序列化这个字典:
{"A":{"x":<!-- ?A.x -->},"B":{"x":<!-- ?B.x -->}}
如何强制 Newtonsoft Json.NET 序列化程序在序列化过程中不对特定字段(不是全部)的值添加引号?
谢谢。
【问题讨论】:
-
{"A":{"x":<!-- ?A.x -->},"B":{"x":<!-- ?B.x -->}}会是无效的 Json 吗?您不能指望 json 序列化程序产生无效的 json。为什么不自己构建字符串(因为这是字符串而不是 Json)? -
为了证明我的观点,将
{"A":{"x":<!-- ?A.x -->},"B":{"x":<!-- ?B.x -->}}放入JsonLint..Error: Parse error on line 3:{ "A": { "x": },"B":{ -
@Liam:当然,这种形式的 JSON 是无效的。我从没有说过。但是在设备处理它之后将有效,方法是将 部分替换为数字。我知道这有点让人厌烦正常的工作方式。
-
你错过了我的观点,你不能指望 json 序列化程序产生无效的 json。如果你想要这种格式,你需要自己制作,而不是使用 Json.Net
-
我完全明白你的意思。但正如你所看到的,我仍然可以实现它。我为什么要重新发明轮子?