动态序列化JSON,可以省略条目

时间:2017-01-31 16:05:33

标签: c# json.net

我使用的API令人沮丧地要求您省略可选参数,而不是将其作为null传递。

此外,数据略有嵌套格式:

{ data: { prop1: 5, prop2: 6, prop3: 7 } }

以前我使用替换来转换它:

"{ data: { prop1: {prop1}, prop2: {prop2}, prop3: {prop3} } }"
   .Replace("{prop1}", prop1)....

但事实证明,如果没有提供值,我发送给它的API只会接受它,如果它没有包含在JSON中。

我没有乱用复杂的字符串连接(因为我没有使用模型绑定),而是考虑简单地创建一个字典并将其序列化为JSON。

如果我这样做:

Dictionary<string, int> props = new Dictionary<string, int>
{
     { "prop1", 6 },
     { "prop3", 7 },
};

string json = JsonConvert.SerializeObject(props, Formatting.Indented);

我可以很好地序列化我需要的任何道具。不幸的是,您可以看到我需要发送数据的方式包含在json的data属性中。我需要在我的字典中放一个字典,但字典被定义为字符串,int这是不可能的。如果我更改了类型,那么我就无法将道具放入其中。

要解决这个问题,我可以看到两种可能的清洁方式:

  • 以某种方式动态组合JSON对象,如XML

例如。 new JsonObject().AddNode("data").AddProperty("Prop1", 3).AddProperty("Prop3", 5)....等。

  • 以一种允许我包含嵌套属性的方式从字典对象中序列化。或者,找到一种方法将json从非嵌套字典分配到新json对象的data属性中。

我还没有办法干净利落地做到这一点 - 或者另外一个解决这个问题的建议将不胜感激。

1 个答案:

答案 0 :(得分:1)

不确定字典方法的问题是什么。这很好用:

{{1}}