C# 使用C构造JSON#
我正在为我的Odata端点调用的POST方法构建一个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是一个数组。
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”