从忽略 C# 关键字的动态序列化 JSON



我正在使用 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 并忘记它,我应该能够即时创建它。

与其向上转换JObjectdynamic,不如将其保留为显式类型变量。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;

使用显式类型还允许编译时检查代码的正确性,并可能提高性能。

演示小提琴在这里。

相关内容

  • 没有找到相关文章

最新更新