【问题标题】:JsonConvert.SerializeObject add backslashes to quotesJsonConvert.SerializeObject 在引号中添加反斜杠
【发布时间】:2019-03-03 05:32:18
【问题描述】:

我正在从我的 C# Windows 服务向 Amazon Web Services SNS 发送一条消息,以便可以从 iOS 应用程序接收它。

PublishRequest pubRequest = new PublishRequest();
pubRequest.TargetArn = arn;

pubRequest.Message = JsonConvert.SerializeObject(myMessage, Formatting.Indented);
pubRequest.MessageStructure = "json";

当我使用 JsonConvert.SerializeObject 时,这会产生一个消息字符串,如下所示:

{"default":"My Message.  ","APNS":{"aps":{"alert":{"title":"My Title","body":"MyBody data"},"data":{"someDataTolookAt":"blahblah"}}}}

但我需要像这样转义 APNS 部分中的引号:

{"default":"My Message.  ","APNS":{\"aps\":{\"alert\":{\"title\":\"My Title\","body\":\"MyBody data\"},\"data\":{\"someDataTolookAt\":\"blahblah\"}}}}

我该怎么做?

【问题讨论】:

  • 编写自己的 JSON 转换器。 See example here
  • 我只是好奇...为什么需要这样的序列化格式?这甚至不是一个有效的 json。你的意思是你希望 APNS 部分是一个字符串而不是一个对象?
  • 出于某种原因,AWS 仅转发消息的默认部分,而不是 APNS 部分。从这个例子我相信反斜杠是必需的docs.aws.amazon.com/sns/latest/dg/SNSMobilePushAPNSAPI.html
  • @HarryBoy 如果您仔细查看文档,请提供有效的 json,并在 { 和 } 周围加上引号

标签: c# json.net amazon-sns jsonconvert


【解决方案1】:

事实上,API 期望 APNS 序列化为字符串,而不是 json,您需要将其值转换为 json 字符串。 为此特定属性创建自定义 JSON 转换器。

[JsonConverter(typeof(MyJsonConverter))]
someclass APNS {get;set;}

此转换器也将执行JsonConvert.SerializeObject(APNSobject) => 因此您的 json 将为 apns 对象转义字符串。

【讨论】:

    猜你喜欢
    • 2017-04-21
    • 1970-01-01
    • 1970-01-01
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多