1

我正在为我的 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')]"

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

4

2 回答 2

2

在 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}')" } 
});
于 2019-02-04T16:26:18.787 回答
0

您正在为键传递字符串值PROJECT@odata.bind,您只需要传递一个数组

sample[ "PROJECT@odata.bind"] =  new JArray(new []{ "/PROJECT('" + prjBarcode + "')" });

或者你可以使用JArray构造函数的另一个重载

sample[ "PROJECT@odata.bind"] =  new JArray("/PROJECT('" + prjBarcode + "')");
于 2019-02-04T16:26:11.113 回答