我正在使用PushSharp处理iOS的推送通知。
一切顺利,直到我意识到我处理推送的方式不太强大:
apnsBroker.QueueNotification(新的ApnsNotification {
DeviceToken = device.DeviceIdentifier,
Payload = JObject.Parse("{\"aps\":{\"alert\" : {\"title\" : \"" + title
+ "\", \"body\" : \"" + body + "\"}, \"badge\":" + badgeCount + "}, " +
"\"entity_id\" : \"" + entityId + "\", \"category_id\" : \"" + categoryId + "\", \"sub_id\" : \"" + subId
+ "\"}")
});
编辑/更新我正在尝试的参数之一是\ t \ ud83d \uddbc️\(基本上,我想传递相框表情符号的unicode字符,因此可以将其渲染为APNS警报)。目前正在中断。
我正在C#中发送这样的代码:@“ \ t \ ud83d \uddbc️\”
因此,正如您所看到的,我正在渲染JSON有效负载,并且此框架采用了JObject。正如我在代码审阅期间立即假定的那样,问题是,如果上述任何参数(标题,正文等)中的任何一个最终成为诸如{或“或{等的字符串,则它将“破坏” JSON,因为JObject可以不能将其解析为有效的JSON。
在这种情况下,您认为我应该怎么做?我是否必须对其进行编码,我想唯一的缺点是编码中有反斜杠或其他东西吗?任何允许用户输入的建议(标题和正文可以是自由格式的文本,因此一切皆有可能)。
预先感谢您的任何建议!
编辑
再次感谢您零帮助。
var escapedString = JsonConvert.ToString(normalString);
保存了一天。重要的是要注意,如果您正在使用它,则转义的字符串不应包装在“”中,因为它已被转义(如下文所述)。
答案 0 :(得分:1)
只要在变量{{1}中用引号引起来,no need to escape braces("
和{
)
关于在变量中使用双引号(}
),您可以执行以下操作:
"
您还需要转义转义字符本身//Escapes quotes
param = param.Replace(@"""", @"\""");
\
此外,这都是valid escapes。
如果您使用的是Newtonsoft.Json,它们会有一个method to do this for you。
下面或take a look here中的用法示例。 请注意,这会为您的字符串添加引号。
//Escapes backslash
param = param.Replace(@"\", @"\\");