Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#将JSON序列化为\\\\_C#_Javascript_Json - Fatal编程技术网

C#将JSON序列化为\\\\

C#将JSON序列化为\\\\,c#,javascript,json,C#,Javascript,Json,我正在生成JSON,将其包含到HTML文件中,因此JSON被包装在Javascript字符串中 e、 g 此代码在javascript中失败,因为它应该是 var dataContacts = '{"Contacts":[{"Id":0,"Active":false,"Company":"Rory The Architect\\\\, Melt"}]}'; var contacts = $.parseJSON(dataContacts).Contacts; 我使用了.NET

我正在生成JSON,将其包含到HTML文件中,因此JSON被包装在Javascript字符串中

e、 g

此代码在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

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

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

Javascript表达式“{a”:“b:\c”}”的计算结果为字符串 “{”a:“b:\c”}”。此字符串包含一个单独的unscaped\,它必须 为JSON而转义。为了获得包含\的字符串,每个\ 必须在Javascript表达式中转义,结果为“\\”


我想知道解决这个问题的最佳途径,为什么NewtonSoft和.NET序列化程序都不支持将JSON编码为直接包含到Javascript文件中呢?实际上还有第二个问题,您还没有发现:如果JSON包含一个引号(
),该怎么办,例如,罗里的建筑师

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

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


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

在我看来,你这样做太难了,给自己带来了不必要的麻烦。为什么要将JSON放入JavaScript字符串中,以便可以立即解析它?JSON已经是JavaScript了,为什么不直接使用它呢

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

var contacts = dataContacts.Contacts;

正如Paul Draper所指出的,一旦撇号和其他字符开始涉及,您尝试使用的方法会带来各种额外的复杂性。

确实
dataContacts.replace(“\”,“\\”)
not work?“为什么NewtonSoft和.NET序列化程序都不支持将JSON编码直接包含到Javascript文件中?”——为什么他们应该这样做?这是一个特殊的语言问题。JSON是一种与语言无关的数据格式
NewtonSoft.Json
可以很好地使用它。NewtonSoft确实支持对Json进行编码,以便直接包含在JavaScript文件中,只要您使用正确的方法。:-)@zerkms-我听到了你的说法,尽管我认为JSON是Javascript,因此Javascript字符串中的JSON是一个有效的用例,因此在支持示例用例场景的库中,支持\转换为\\\\似乎是合理的。你的想法?@davidsee:“那是Javascript”——不。它只是JS本机支持的一种数据格式。这并不意味着任何JSON解析器都需要处理任何编程语言的细节。我的想法:JSON解析库应该解析/生成有效的JSON。如果您想在其他地方使用JSON字符串,您有责任对其进行相应的编码。谢谢@JLRishe,只存储为Javascript比先解析Javascript字符串更容易、更高效。至于撇号问题,这从来都不是一个问题,因为我使用的是微软和newtonsoft的解析器,它们会处理这个问题。我的问题只是反斜杠,因为有人在数据中加了\,但失败了,因为两个解析器都不能将JSON作为Javascript字符串处理。不管怎样,我不需要担心它的工作,因为本机符号更实用。
var dataContacts = 
    '{"Contacts":[{"Id":0,"Active":false,"Company":"Rory's Architect\\, Melt"}]}';
string myJsonString = myJson.Replace("\\", "\\\\").Replace("'", "\\'")
var dataContacts = 
       {"Contacts":[{"Id":0,"Active":false,"Company":"Rory The Architect\\, Melt"}]};

var contacts = dataContacts.Contacts;