基于提供的值在 C# 中动态创建 JSON 对象

Posted

技术标签:

【中文标题】基于提供的值在 C# 中动态创建 JSON 对象【英文标题】:Dynamically creating a JSON object in C# based on provided values 【发布时间】:2021-12-29 18:19:10 【问题描述】:

我正在尝试根据提供给我的值动态创建 JSON 对象。

第一个场景 - 我拥有所有的价值观

 string param1 = "Hey";
 string param2 = "Bye";
 string param3 = "Later";

我会像这样导出我的 Json:

 private string BuildJson (string param1, string param2, string param3)
 
       //Passed values for example
      //param1 = "Hey";
      //param2 = "Bye";
      //param3 = "Later";

      object jJson = new 
      
          VALS= new 
             
                 val1 = param1,
                 val2 = param2,
                 val3 = param3
             
      ;

      return JsonConvert.SerializeObject(jJson );
 

这很好用。但是,现在我试图找到一种方法来创建这个相同的 JSON 对象,而不知道哪个参数将具有值。如果没有价值,那么我不希望我的 jJson 拥有该属性。

例如

  private string BuildJson (string param1, string param2, string param3)
  
   //Passed values for example
  //param1 = "Hey";
  //param2 = null;
  //param3 = "Later";

  //Since param2 is NULL, I would NOT want to have it all together in my JSON like below

  object jJson = new 
  
      VALS= new 
         
             val1 = param1,
             val3 = param3
         
  ;

  return JsonConvert.SerializeObject(jJson );

有没有另一种方法可以像这样动态创建 JSON?谢谢。

【问题讨论】:

这能回答你的问题吗? Add Properties to anonymous type only if they are not null C# 【参考方案1】:

由于这是Newtonsoft,因此只需包含NullValueHandling = NullValueHandling.Ignore

给定

private static string BuildJson(string param1, string param2, string param3)


   object jJson = new
   
      VALS = new
      
         val1 = param1,
         val2 = param2,
         val3 = param3
      
   ;

   return JsonConvert.SerializeObject(jJson, 
      Formatting.Indented,
      new JsonSerializerSettings()
      
         NullValueHandling = NullValueHandling.Ignore
      );

用法

var result = BuildJson("asd", null, "sdf");
Console.WriteLine(result);

输出


  "VALS": 
    "val1": "asd",
    "val3": "sdf"
  

免责声明:我会推荐 Text.Json 用于任何未开发的开发,并且还会劝阻您不要使用这样的匿名类型,而是使用实际的具体模型。

【讨论】:

免责声明。谢谢。

以上是关于基于提供的值在 C# 中动态创建 JSON 对象的主要内容,如果未能解决你的问题,请参考以下文章

C# 使用字符串数组中的嵌套对象动态创建 JSON

从 foreach 创建动态 JSON

创建从 C# 到 JavaScript 的动态 JSON

为动态 JSON 创建 C# 模型

Vuejs 和 HTML 动态创建复杂的 JSON 对象并使用 V-for 向用户显示相同的对象

appsettings.json 值在 Azure Functions App V3 中未绑定