序列化我的实体时Json.Net意外字符("\")

Ren*_*aud 23 c# wcf entity-framework json.net

我正在使用优秀的Json.Net库来序列化由实体框架生成的实体.我使用以下代码来执行此操作:

using (MyVoucherEntities context = new MyVoucherEntities())
{
  List<MyObject> list = context.MyObjects.ToList();
  string json = JsonConvert.SerializeObject(list);
}
Run Code Online (Sandbox Code Playgroud)

一切顺利我的意思是,对象被正确序列化除了一个想法:它添加转义字符"\",这使我在客户端反序列化时遇到噩梦.

 [
     {
         \"$id\": \"1\",
         \"CreationDate\": \"\\\/Date(1293186324257+0000)\\\/\",
        \"ImageUrl\": \"http:\/\/www.google.com\",
         \"Title\": \"Here is a title\"
     } ]
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么以及如何摆脱这些转义字符斜杠"\"?

Jon*_*eet 29

我怀疑它实际上并没有添加转义字符.我怀疑你只是在调试器中查看字符串,并且正在添加转义.

尝试将其转储到文件或控制台.


Ren*_*aud 17

我找到了为什么我的字符串("\")中有转义字符的原因.序列化我的对象后,我通过WCF将JSON字符串返回给客户端应用程序.显然,WCF会在将字符发送到网络之前自动将这些字符添加到字符串中.这是默认行为,显然是强制性的.

由于我不想要这些转义字符,解决方法是将服务的返回类型更改为Stream,因此,将JSON字符串返回到内存流中.它工作得很好而且非常快.

  • 获取转义字符的真正原因是因为您手动序列化返回值_and_ WCF还将您的(已经序列化的)返回值序列化为其自然行为的一部分.所以JSON最终会有转义字符.通过作为流返回,您实际上是围绕WCF序列化器进行最终运行.另一种可能的解决方案是简单地从您的方法返回非序列化对象,并让WCF序列化它,但这意味着不使用Json.Net. (11认同)