如何将空值传递给JSON主体请求中的键

oogrdqng  于 2023-05-19  发布在  其他
关注(0)|答案(2)|浏览(127)

我想在API中使用POST请求将空值传递给键。
例如,我想传递下面的JSON数据。也就是说,ExpTeamID 为空。

{
   "ID":162617,
   "TextKey":"107737",
   "Exp":null,
   "TeamID":null
}

结果在Postman中被接受,但是当我尝试使用下面的C#代码传递相同的结果时,我的JSON内容变得无效。

long idvalue = 162617;
string textkeyvalue = "107737";
string expvalue = null;
long? teamIDvalue = null;

string postData = "{\"ID\":" + idvalue + ",\"TextKey\":\"" + textkeyvalue + "\",\"Exp\":\"" + expvalue + "\",\"TeamID\":\"" + teamIDvalue + "\"}";

这给了我下面的输出。

{
   "ID":162617,
   "TextKey":"107737",
   "Exp":"",
   "TeamID":
}

而我的请求由于无效的JSON主体而失败。那么,我如何传递这种null数据或null关键字?
注意:所有的键值对在我的API中都是强制性的,所以如果它们是空的,我不能省略它们。
我只想以下面的格式传递数据。

{
   "ID":162617,
   "TextKey":"107737",
   "Exp":null,
   "TeamID":null
}
b5lpy0ml

b5lpy0ml1#

要回答您的问题,要为空值编写文本,您可以这样做:

var result = "my value is " + (strValue ?? "null");

或添加引号:

var result = "my value is " + (strValue == null ? "null" : $"\"{strValue}\"");

你也可以创建静态的helper方法来简化:

static string write(string str) => str == null ? "null" : $"\"{str}\"";
static string write(long? value) => value == null ? "null" : value.ToString();

所以在你的例子中,它变成了:

string postData = "{\"ID\":" + idvalue + ",\"TextKey\":" + write(textkeyvalue) +
                  ",\"Exp\":" + write(expvalue) + ",\"TeamID\":" +
                  write(teamIDvalue) + "}";

更好的解决方案!

为数据模型创建一个类,并使用一个库(例如System.Text.Json)来序列化它,如下所示:

public class MyData
{
   public long ID { get; set; }
   public string TextKey { get; set; }
   public string Exp { get; set; }
   public long? TeamID { get; set; }
}

// Construct model
var data = new MyData()
{
   ID = 162617,
   TextKey = "107737",
   Exp = null,
   TeamID = null,
}

// Serialize to JSON
var result = System.Text.Json.JsonSerializer.Serialize(data);
ssm49v7z

ssm49v7z2#

gepa的答案是正确的,但你也可以序列化一个匿名对象:

long idvalue = 162617;
string textkeyvalue = "107737";
string? expvalue = null;
long? teamIDvalue = null;

string postData = System.Text.Json.JsonSerializer.Serialize(new
{
    ID = idvalue,
    TextKey = textkeyvalue,
    Exp = expvalue,
    TeamID = teamIDvalue,
});

相关问题