C#Serialize JSON turn \ into \\\\

时间:2013-11-11 06:24:44

标签: c# javascript json

我正在为包含方向生成JSON到HTML文件中,因此JSON被包装在Javascript字符串中。

e.g。

var dataContacts = 
        '{"Contacts":[{"Id":0,"Active":false,"Company":"Rory The Architect\\, Melt"}]}';

var contacts = $.parseJSON(dataContacts).Contacts;

此代码在javascript中失败,因为它应该是

var dataContacts = 
        '{"Contacts":[{"Id":0,"Active":false,"Company":"Rory The Architect\\\\, Melt"}]}';

var contacts = $.parseJSON(dataContacts).Contacts;

我已经同时使用了.NET Serializer和NewtonSoft.Json,并且都没有支持将\转换为\\\\,他们会将其转移到\中,这对于JSON的AJAX传输来说很好但是不适用于嵌入Javascript字符串的JSON

我假设我可能需要做某种myJson.Replace(“\”,“\\”);

我已经查看了为什么我需要输出中的\\,请在此处查看此链接:

Why does the jQuery JSON parser need double escaping for backslashes?

  

第一个转义符在Javascript字符串文字中转义它。该   第二个escape在JSON字符串文字中转义它。

     

Javascript表达式“{”a“:”b:\ c“}'计算字符串   '{ “一个”: “B:\ C”}'。此字符串包含一个未转义的\,必须   为JSON转义。为了得到一个包含\的字符串,每个\   必须在Javascript表达式中进行转义,结果为“\\”。

我想知道这个问题的最佳前进道路以及为什么NewtonSoft或.NET序列化程序都不支持将JSON编码为直接包含在Javascript文件中

2 个答案:

答案 0 :(得分:1)

在我看来,你通过艰难的方式做事会给你带来不必要的麻烦。为什么要将JSON放入JavaScript字符串中,以便您可以立即解析它? JSON已经是JavaScript,为什么不直接使用呢?

var dataContacts = 
       {"Contacts":[{"Id":0,"Active":false,"Company":"Rory The Architect\\, Melt"}]};

var contacts = dataContacts.Contacts;

正如Paul Draper所指出的那样,一旦撇号和其他角色开始参与,你所使用的方法会提供各种额外的复杂功能。

答案 1 :(得分:0)

这里实际上还存在第二个问题,您尚未确定:如果JSON包含单引号('),例如, Rory's Architect

不仅Javscript字符串不是有效的JSON,它甚至不是有效的 Javascript

var dataContacts = 
    '{"Contacts":[{"Id":0,"Active":false,"Company":"Rory's Architect\\, Melt"}]}';

要解决此问题,您可以(在C#中)

string myJsonString = myJson.Replace("\\", "\\\\").Replace("'", "\\'")

请注意,在C#中转义反斜杠是必要的,以获得\\\\'。这是很多逃避,到处都是;)