【问题标题】:JsonConvert.DeserializeObject from PubNub message来自 PubNub 消息的 JsonConvert.DeserializeObject
【发布时间】:2014-02-17 21:57:20
【问题描述】:

当我手动将此消息发送到 MakeAction 时,它会起作用并弹出消息框:

string json = @"{'action':'turncompleted', 'messageID':'123123123',  'playerID':'100000067174580', 'round':1, 'values':[{'longitude':21.09375, 'latitude':24.527134822598}, {'longitude':1.40625, 'latitude':23.885837699862}]}";

public void MakeAction(string message)
    {
        Poker_Server_v4_0.Action a = JsonConvert.DeserializeObject<Poker_Server_v4_0.Action>(message);            
        System.Windows.Forms.MessageBox.Show(a.action + a.messageID); 
    }

但是当我使用来自 PubNub 的消息时,它不起作用:

static void DisplaySubscribeReturnMessage(string result)
    {
        //Receives the message from Pubnub takes care of the Action.
        MessageToAction MTA = new MessageToAction();
        MTA.MakeAction(result);
    }

来自 PubNub 的消息与我手动创建的消息略有不同:

[{\"action\":\"turncompleted\",\"messageID\":\"123123123\",\"playerID\":\"100000067174580\",\"round\":1,\"answers\":[{\"longitude\":21.09375,\"latitude\":24.527134822598},{\"longitude\":1.40625,\"latitude\":23.885837699862}]},\"13926740640746402\",\"chinese-jefecito\"]

我试图删除文本中的括号和斜线,但是“值”值周围的斜线也被替换了。

我想知道我在这里做错了什么?

这里也是动作类:

class Action
{

    [JsonProperty("action")]
    public string action { get; set; }

    [JsonProperty("messageID")]
    public string messageID { get; set; }

    [JsonProperty("gameID")]
    public string gameID { get; set; }

    [JsonProperty("invitorFacebookID")]
    public string invitorFacebookID { get; set; }

    [JsonProperty("gametype")]
    public string gametype { get; set; }

    [JsonProperty("numberOfPlayers")]
    public string numberOfPlayers { get; set; }
    //public List<string> longitude { get; set; }
    //public List<string> latitude { get; set; }
    //public List<string> values { get; set; }

    [JsonProperty("players")]
    public List<Players> players { get; set; }

    //Should be empty and removed!
    [JsonProperty("values")]
    public List<Value> values { get; set; }


    public Action() { }

}

class Players
{
    //Players
    [JsonProperty("playerID")]
    public string playerID { get; set; }

    [JsonProperty("facebookID")]
    public string facebookID { get; set; }
}

class Value
{
    //Answers
    [JsonProperty("longitude")]
    public string longitude  {get; set;}

    [JsonProperty("latitude")]
    public string latitude { get; set; }
}

提前致谢, 托马斯

【问题讨论】:

    标签: c# pubnub


    【解决方案1】:

    好吧,与其提供更正,我只会给你我会使用的代码。请注意,您发布的示例 json 无效。我正在删除这部分; \"13926740640746402\",\"chinese-jefecito\"] 并在那里关闭 Action 对象的数组。您不能在 json 中拥有自己的键(两者都是没有值的键),而且它们位于数组中而不是对象中。无论如何,这是我正在使用的json;

    [{\"action\":\"turncompleted\",\"messageID\":\"123123123\",\"playerID\":\"100000067174580\",\"round\":1,\ "答案\":[{\"经度\":21.09375,\"纬度\":24.527134822598},{\"经度\":1.40625,\"纬度\":23.885837699862}]}]

    public class Action
    {
         public string action { get; set; }
         public string messageID { get; set; }
         public string round { get; set; }
         public Answer[] answers { get; set; }
    }
    
    public class Answer
    {
         public string longitude { get; set; }
         public string latitude { get; set; }
    }
    
    
    
    
    Action[] actions = JsonConvert.DeserializeObject<Action[]>(jsonString);
    

    【讨论】:

    • 感谢您的帮助。我将其更改为 Poker_Server_v4_0.Action[] a = JsonConvert.DeserializeObject(message);但它仍然不起作用。我在 public Action() {} 上有一个断点,当我使用 Action[] 而不是 Action 时会触发该断点,然后它就会停止。它不会给我错误消息或任何东西,它只是停止。
    • @user2524586 好吧,我注意到其他一些奇怪的东西。我刚刚更新了从头开始编写的代码。我不得不改变你的 json sn-p 因为它不是有效的 json。
    • 我实际上注意到了这一点。我将检查 PubNub C# 示例,看看它们是否有任何推荐的方法来检索消息。再次,非常感谢。
    • 您也可以通过 support@pubnub.com 直接与我们联系,我们可以通过直接渠道与您合作,让您恢复正常运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多