C#中基于传入参数动态构建JSON并自动剔除空值属性的实现方案
解决方案
方案1:使用Newtonsoft.Json自带的null值过滤配置(最简便,仅需修改1行代码)
你无需修改原有匿名对象的构建逻辑,仅需要在序列化时添加NullValueHandling.Ignore配置即可,序列化工具会自动跳过所有值为null的属性,完全符合你的需求:
private string BuildJson (string param1, string param2, string param3) { object jJson = new { VALS= new { val1 = param1, val2 = param2, val3 = param3 } }; // 仅需添加序列化配置即可自动过滤null属性 return JsonConvert.SerializeObject(jJson, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }); }
这个方案完全适配你的场景:当param2为null时,输出的JSON中VALS节点下只会保留val1和val3。
方案2:使用JObject动态构建(适合后续有更复杂动态属性判断的场景)
如果你后续需要不止过滤null,还要根据其他业务规则判断是否添加属性,可以直接用JObject动态构造:
private string BuildJson (string param1, string param2, string param3) { JObject valsObj = new JObject(); if(param1 != null) valsObj["val1"] = param1; if(param2 != null) valsObj["val2"] = param2; if(param3 != null) valsObj["val3"] = param3; JObject jJson = new JObject { ["VALS"] = valsObj }; // JObject的ToString方法默认输出格式化后的JSON,要压缩的话传Formatting.None即可 return jJson.ToString(Formatting.None); }
这个方案的灵活性更高,你可以在添加属性的判断逻辑里加入任意业务规则。
内容的提问来源于stack exchange,提问作者user17336551
相关产品推荐
相关产品推荐

