问题描述
我正在尝试创建一个不基于任何类或对象的 JSON 响应。它本质上是非常动态的。因此我开始使用来自 Newtonsoft.Json.Linq 的 JObject
。虽然它生成了正确的构造,但它没有用双引号封装值。
如何在值周围强制使用这些双引号?
这是我用来测试的一小段代码:
var job = new JObject();
job.Add(new JProperty("name","filip"));
string nm = "Rob";
job.Add(new JProperty("name2",nm));
job.Add(new JProperty("name4",new JValue("Samantha")));
结果:
{"name":filip,"name2":Rob,"name4":Samantha}
我的期望:
{"name":"filip","name2":"Rob","name4":"Samantha"}
这是一个完整的例子:
public class DynJSonService : NancyModule
{
public DynJSonService()
{
Get["/DynJSon"] = _ =>
{
var job = new JObject();
job.Add(new JProperty("name","filip"));
string nm = "Rob";
job.Add(new JProperty("name2",nm));
job.Add(new JProperty("name4",new JValue("Samantha")));
return job;
};
}
}
当浏览到 url 时,这会导致通过浏览器给出以下响应:localhost:4439/FilipsApps/DynJSon
{"name":filip,"name4":Samantha}
解决方法
Nancy 默认在内部使用 SimpleJson
序列化器,它不知道如何正确处理 JObject
和 JProperty
。如果你想使用这些,你应该将 Nancy 配置为使用 Json.Net(又名 Newtonsoft.Json)序列化程序。有一个 Nancy.Serialization.JsonNet
NuGet 包。安装该软件包后,它应该可以正常工作。如果您需要自定义 Json.Net 序列化程序的设置,readme.md 中有该包的说明。