我有一个JSON对象,其中一个元素的值是一个字符串.在这个字符串中有字符"
.我拿这个整个JSON对象,在我的ASP.NET服务器代码中,我执行以下操作来获取命名对象rpc_response
并将其添加到POST响应中的数据:
var serializer = new System.Web.Script.Serialization.JavaScriptSerializer(); HttpContext.Current.Response.AddHeader("Pragma", "no-cache"); HttpContext.Current.Response.AddHeader("Cache-Control", "private, no-cache"); HttpContext.Current.Response.AddHeader("Content-Disposition", "inline; filename=\"files.json\""); HttpContext.Current.Response.Write(serializer.Serialize(rpc_response)); HttpContext.Current.Response.ContentType = "application/json"; HttpContext.Current.Response.StatusCode = 200;
在序列化对象之后,我在另一端(不是Web浏览器)接收它,并且该特定字符串如下所示:\u003cRPC\u003e
.
我该怎么做才能防止这些(和其他)字符被正确编码,仍然可以序列化我的JSON对象?
字符都被编码"正确"!1使用有效的JSON库来正确访问JSON数据 - 它是一种有效的 JSON编码.
转义这些字符可防止通过JSON进行HTML注入 - 并使JSON XML友好.也就是说,即使JSON直接emited到JavaScript(如做是相当频繁的JSON是有效的2的JavaScript的子集),它不能用于终止<script>
早期的元素,因为相关的字符(例如<
,>
)的内JSON编码本身.
该标准JavaScriptSerializer
并没有要改变这种行为的能力.这种转义在Json.NET实现中可能是可配置的(或不同的)- 但是,它应该无关紧要,因为有效的JSON客户端/库必须理解转义.\u
1来自RFC 4627:JavaScript对象表示法的应用程序/ json媒体类型(JSON),
任何角色都可能被转义.如果字符在基本多语言平面(U + 0000到U + FFFF)中,那么它可以表示为六个字符的序列:反向固相,后跟小写字母u,后跟四个十六进制数字,编码角色的代码点..
另请参阅C#将Facebook响应转换为正确的编码字符串(这也与JSON转义相关).
2有一种罕见的情况,当这不成立,但忽略(或说明)..