首页 > 解决方案 > 使用 C# 构造 JSON

问题描述

我正在为我的 Odata 端点调用的 POST 方法构建一个 JSON 主体,如下所示

 Newtonsoft.Json.Linq.JObject sample;
sample = new Newtonsoft.Json.Linq.JObject();

sample["status"] = "New";
sample[ "PROJECT@odata.bind"] = "["+"/PROJECT('" + prjBarcode + "')"+"]";

其中 PROJECT@odata.bind 是一个数组。我正在寻找要构建的 JSON

 "status": "New",
 "PROJECT@odata.bind":["/PROJECT('PJ1')"]

但是使用我上面的代码,它正在生成

  "PROJECT@odata.bind":"[/PROJECT('PJ1')]"

[]我该如何""解决这个问题

标签: c#asp.netjsonasp.net-web-api

解决方案


在 JSON 中,方括号 ( [...]) 表示一个数组,因此您需要创建一个,例如:

var array = new Newtonsoft.Json.Linq.JArray(new string[] {"/PROJECT('" + prjBarcode + "')" });
sample["PROJECT@odata.bind"] = array;

您还应该考虑使用插值字符串,它使您的代码更具可读性:

var array = new Newtonsoft.Json.Linq.JArray(new string[] {"/PROJECT('{prjBarcode}')" });

不过,我一开始不会像这样构建 JSON。您应该创建一个与您的结构相匹配的具体类型并将其序列化。例如:

public class Data
{
    public string Status { get; set; }
    [JsonProperty("PROJECT@odata.bind")]
    public string[] Projects { get; set; }
}

var json = JsonConvert.SerializeObject(new Data
{ 
    Status = "New", 
    Projects = new string[] {$"/PROJECT('{prjBarcode}')" } 
});

推荐阅读