JProperty 不会为 value 生成双引号

问题描述

我正在尝试创建一个不基于任何类或对象的 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 序列化器,它不知道如何正确处理 JObjectJProperty。如果你想使用这些,你应该将 Nancy 配置为使用 Json.Net(又名 Newtonsoft.Json)序列化程序。有一个 Nancy.Serialization.JsonNet NuGet 包。安装该软件包后,它应该可以正常工作。如果您需要自定义 Json.Net 序列化程序的设置,readme.md 中有该包的说明。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...