【问题标题】:Correct JSON format for GCM messageGCM 消息的正确 JSON 格式
【发布时间】:2013-09-02 05:06:24
【问题描述】:

这是我的 JSON

   var postData = 
                     "{ \"registration_ids\": [ \"" + pushNotificationState.RegistrationId + "\" ], "+
                         "\"data\": {\""+ pushNotificationState.NotificationData.NotificationData + "\"}";

注册 ID 和通知数据是变量。我从 GCM 服务器收到 400 响应,说 JSON 格式不正确。谁能挑出我哪里出错了?

干杯

【问题讨论】:

    标签: c# .net json push-notification google-cloud-messaging


    【解决方案1】:

    您有一个打开的{,但有两个关闭的}

    var postData = "{ \"registration_ids\": [ \"" + pushNotificationState.RegistrationId + "\" ], " + "\"data\": \""+ pushNotificationState.NotificationData.NotificationData + "\"}";
    

    【讨论】:

    • 为回复和帮助欢呼,但服务器仍然保持错误的 json 格式。
    • 我认为你应该添加一个断点来查看 postData 的确切值,并确认格式。检查它是否是格式良好的 JSON 字符串的简单方法是由一些 JSON 查看器查看,例如 jsonviewer.stack.hu
    • 您可以将调试值发送到我的收件箱,以便我为您检查格式
    • 我得到registration_ids不是一个数组。这很奇怪,因为在示例格式中它看起来不像一个数组。
    • 它是在一个简单的字符串数组之后。我的错。
    【解决方案2】:

    使用一些Json 工具,而不是手动创建字符串。否则,如果某些字符串变量包含{}" 等,您将遇到问题。

    var json = JsonConvert.DeserializeObject(
                new {
                    registration_ids = new[] { pushNotificationState.RegistrationId },
                    data = pushNotificationState.NotificationData.NotificationData
                });
    

    【讨论】:

      【解决方案3】:
         var postData =      "{ \"registration_ids\": [ \"" + pushNotificationState.RegistrationId + "\" ]}, "+
                                   "\"data\": {\""+ pushNotificationState.NotificationData.NotificationData + "\"}";
      

      尝试用那个替换它。

      【讨论】:

        【解决方案4】:

        您可以使用以下代码创建请求对象,然后转换为json。

        public  class GCMRequest
        {
            public GCMRequest()
            {
                data = new PayLoad();
            }
            public List<string> registration_ids;
            public PayLoad data;
        }
        public class PayLoad
        {
            public string key;
        }
        

        您可以创建如下请求

        GCMRequest req = new GCMRequest();
        List<string> tokens = new List<string>();
        // .. fill the tokens to the 'tokens' list
        req.registration_ids = tokens;
        req.data.key = "Hi, how are you"; // message you want to send
        string json = new JavaScriptSerializer().Serialize(req);
        

        希望这会有所帮助。

        【讨论】:

        • PayLoad 类的用途是什么?
        猜你喜欢
        • 1970-01-01
        • 2022-08-16
        • 1970-01-01
        • 2018-09-24
        • 1970-01-01
        • 1970-01-01
        • 2015-12-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多