2010-10-14 88 views
0

我有一个手动生成一些json响应的服务器端操作。在json中是一个包含字符串值的属性。json的转义字符串导致asp.net服务器端操作

什么是最简单的方法来转义此json结果中包含的字符串值?

所以这

string result = "{ \"propName\" : '" + (" *** \\\"Hello World!\\\" ***") + "' }"; 

会变成

string result = "{ \"propName\" : '" + SomeJsonConverter.EscapeString(" *** \\\"Hello World!\\\" ***") + "' }"; 

,并导致以下JSON

{ \"propName\" : '*** \"Hello World!\" ***' } 

回答

1

首先我觉得这个想法手动实现序列化并不好。你只能为了学习的目的去做mostla,或者你有其他非常重要的原因,为什么你不能使用标准的.NET类(例如,使用必须使用.NET 1.0-3.0而不是更高版本)。

现在回到您的代码。您目前生成的结果不是JSON格式。你应该把属性名和属性值在双配额:

{ "propName" : "*** \"Hello World!\" ***" } 

你怎么能对http://www.json.org/阅读不仅性格的双重配额必须逃脱。反斜杠字符必须被转义。你在http://www.jsonlint.com/上验证你的JSON结果。

如果实施反序列化也可手动你应该知道,有更多的字符,这可以被abbitionally逃到\"\\\/,\ B,\楼\ n,\ r,\ t与带有\ U哪些遵循4个十六进制数字。

我在回答的开头写道,最好使用标准的.NET类,如DataContractJsonSerializerJavaScriptSerializer。如果您必须使用.NET 2.0而不是更高版本,则可以使用Json.NET

+0

感谢您的答复。我可能只需要使用内置的序列化。最初不这样做的原因是需要执行额外的代码,并且当时看起来像是过度杀伤性的。字符串连接(在这种情况下)是最简单和最不起作用的。注意:我根据您对属性名称的反馈编辑了问题(好点) – 2010-10-16 05:11:23

+0

在您的回答中,指向JavaScriptSerializer的链接不起作用 – 2010-10-16 05:12:25

+0

@Jason Jarrett:谢谢,链接已修复。 – Oleg 2010-10-16 08:09:24

0

您可以尝试类似:

string.replace(/(\\|")/g, "\\$1").replace("\n", "\\n").replace("\r", "\\r"); 
相关问题