【问题标题】:Dynamically creating a JSON object in C# based on provided values基于提供的值在 C# 中动态创建 JSON 对象
【发布时间】: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?谢谢。

【问题讨论】:

标签: c# json


【解决方案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 用于任何未开发的开发,并且还会劝阻您不要使用这样的匿名类型,而是使用实际的具体模型。

【讨论】:

  • 免责声明。谢谢。
猜你喜欢
  • 2018-11-08
  • 2019-10-21
  • 1970-01-01
  • 2016-05-30
  • 2014-08-22
  • 2019-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多