C# 使用C构造JSON#

C# 使用C构造JSON#,c#,asp.net,json,asp.net-web-api,C#,Asp.net,Json,Asp.net Web Api,我正在为我的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是一个数组。

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

如果
[]
中附带了
如何修复此问题您正在为
传递字符串值PROJECT@odata.bind
键,您只需传递一个数组

sample[ "PROJECT@odata.bind"] =  new JArray(new []{ "/PROJECT('" + prjBarcode + "')" });
或者您可以使用另一个重载的
JArray
构造函数

sample[ "PROJECT@odata.bind"] =  new JArray("/PROJECT('" + prjBarcode + "')");
在JSON中,方括号(
[…]
)表示数组,因此需要创建一个数组,例如:

var array = new Newtonsoft.Json.Linq.JArray(new string[] {"/PROJECT('" + prjBarcode + "')" });
sample["PROJECT@odata.bind"] = array;
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}')" } 
});

你也应该考虑使用,它使你的代码更加可读:

var array = new Newtonsoft.Json.Linq.JArray(new string[] {"/PROJECT('{prjBarcode}')" });
不过,我一开始不会像这样构建JSON。您应该创建一个与您的结构相匹配的具体类型并序列化它。例如:

var array = new Newtonsoft.Json.Linq.JArray(new string[] {"/PROJECT('" + prjBarcode + "')" });
sample["PROJECT@odata.bind"] = array;
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}')" } 
});

sample
的类型是什么?json是如何生成的?什么是
sample
?@Alexander抱歉,我更新了我的问题now@DavidG我已经更新了我的问题,我收到错误
无法将类型“string[]”隐式转换为“Newtonsoft.Json.Linq.JToken”
修复,并添加了一个更好的选项。我发现错误无法将类型“string[]”隐式转换为“Newtonsoft.Json.Linq.JToken”