终端一体化运控平台
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
 
 
 

86 řádky
3.0 KiB

  1. using BPA.Helper;
  2. using Newtonsoft.Json;
  3. using Newtonsoft.Json.Linq;
  4. using System;
  5. using System.Linq;
  6. namespace BPASmartClient.DosingSystem.Model.MQTT.Messages
  7. {
  8. public static class MsgPackExtensionMethod
  9. {
  10. public static MsgPackage Deserialize(this string msg)
  11. {
  12. if (msg != null)
  13. {
  14. if (msg.Iskey("MessageId") && msg.Iskey("Message") && msg.Iskey("MessageLen"))
  15. {
  16. var obj = msg.FromJSON<MsgPackage>();
  17. if (obj != null)
  18. return obj;
  19. }
  20. else
  21. {
  22. var id = msg.ToLower().GetJsonObjValue("messageid");
  23. if (int.TryParse(id, out int tempId))
  24. {
  25. if (MessageDefine.MSG.ContainsKey(tempId))
  26. {
  27. MsgPackage package = new MsgPackage();
  28. package.MessageId = tempId;
  29. if (int.TryParse(msg.ToLower().GetJsonObjValue("messagelen"), out int tempLen))
  30. package.MessageLen = tempLen;
  31. var res = msg.ToLower().GetJsonObjValue("message");
  32. if (res != null)
  33. {
  34. package.Message = (IMessage)JsonConvert.DeserializeObject(res, MessageDefine.MSG[tempId]);
  35. }
  36. return package;
  37. }
  38. }
  39. }
  40. }
  41. return new MsgPackage();
  42. }
  43. public static string Serialize(this IMessage mes)
  44. {
  45. MsgPackage msg = new MsgPackage();
  46. var res = MessageDefine.MSG.FirstOrDefault(p => p.Value == mes.GetType());
  47. msg.MessageId = res.Key;
  48. msg.MessageLen = JsonConvert.SerializeObject(mes).Length;
  49. msg.Message = mes;
  50. return JsonConvert.SerializeObject(msg);
  51. }
  52. public static string GetJsonObjValue(this string input, string key)
  53. {
  54. try
  55. {
  56. JObject jo = (JObject)JsonConvert.DeserializeObject(input);
  57. if (jo != null && jo.ContainsKey(key))
  58. return jo[key].ToString();
  59. else
  60. return string.Empty;
  61. }
  62. catch (Exception EX)
  63. {
  64. MessageLog.GetInstance.ShowEx(EX.ToString());
  65. return string.Empty;
  66. }
  67. }
  68. public static bool Iskey(this string input, string key)
  69. {
  70. try
  71. {
  72. JObject jo = (JObject)JsonConvert.DeserializeObject(input);
  73. return jo != null && jo.ContainsKey(key);
  74. }
  75. catch (Exception EX)
  76. {
  77. MessageLog.GetInstance.ShowEx(EX.ToString());
  78. return false;
  79. }
  80. }
  81. }
  82. }