我正在使用 Json.net,我所需要的只是创建JSON字符串以作为HTTP POST发送的最简单形式。出于这个原因,我不想仅仅为了能够正确序列化它而创建新的自定义对象。所以我在 Json.net 选择了动态方法。
我需要的 JSON 如下所示:
{
root: {
header: {
namespace: "",
name: ""
},
body: {
email: email
myArray:[
{
item1: "",
item2: ""
},
{
item3: "",
item4: ""
},
]
}
}
}
所以我尝试执行以下操作:
dynamic httpRequestBody = new JObject();
httpRequestBody.root = new JObject();
httpRequestBody.root.header = new JObject();
httpRequestBody.root.header.namespace = "";
httpRequestBody.root.header.name = "name;
但是由于"命名空间"是一个 C# 关键字,它不允许我使用它。有没有办法绕过它,因为我需要"命名空间"作为 JSON 的一部分?如果没有,创建此 JSON 字符串的最简单方法是什么?
澄清一下,我对创建自己的小类并序列化它没有强烈的看法,但感觉既然我只需要发送一些 jSON 并忘记它,我应该能够即时创建它。
与其向上转换JObject
以dynamic
,不如将其保留为显式类型变量。JObject
实现了IDictionary<string, JToken>
,可以使用这些以及从基元类型到JToken
的隐式转换运算符,将任何名称的属性值设置为任何基元值或其他JToken
:
var header = new JObject();
header["namespace"] = ""; // Here we use the implicit operator from string to JToken
header["name"] = "name";
httpRequestBody["root"]["header"] = header;
使用显式类型还允许编译时检查代码的正确性,并可能提高性能。
演示小提琴在这里。