我正在使用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并将其遗忘,因此感觉像是,我应该能够创建即时进行。
答案 0 :(得分:1)
与其将您的JObject
转换为dynamic
,而不是将其保留为显式类型的变量。 JObject
实现IDictionary<string, JToken>
,可以与implicit conversion operators from primitive types to 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;
使用显式类型还可以在编译时检查代码的正确性,并且可能improve performance。
演示小提琴here。