我的json应该是什么样的?使用Web套接字发送消息

时间:2018-08-01 20:28:38

标签: c# json websocket

  • 我有两个控制台应用程序-一个Web套接字服务器和一个客户端。
  • 客户端控制台应用程序具有“ Light”属性,其状态为on或off / true或false

过程:

  1. 客户端向服务器发送一条消息,请求“ Light” 打开。
  2. 然后服务器以一条已确定状态(打开或关闭)的消息作为响应
  3. 客户端收到响应并设置灯光状态

我想使用JSON发送消息。这就是我的想法,对吗?

客户端到服务器(请求):

"data":
{
   "type":"request"
}

服务器到客户端(响应):

"data":
{
   "type":"light",
   "state":true
}

例如客户处理响应:

Data data = JsonConvert.DeserializeObject<Data>(message);

switch(data.Type)
{
   case "light":
      this.Light = data.State;
   break;
}

我处理一切的逻辑和方式合理吗?

这是我明智地使用json的方式吗?代替我只是发送诸如“您可以打开灯”之类的纯文本消息吗?

1 个答案:

答案 0 :(得分:3)

"data":
{
   "type":"light",
   "state":true
}

无效的JSON。 JSON中的所有内容都必须包装在对象或数组中。您不能以属性名称开头JSON-它的属性是什么?没有。它必须是某物的属性。因此,您可以选择

{ "type": "light", "state": true } 

{ "data": { "type": "light", "state": true } }. 

第二个更为冗长,是否确实增加了任何价值还值得怀疑。

您可以验证在https://jsonlint.com等网站上编写的任何JSON,但是无论如何您都不应该手工编写JSON。始终序列化一个C#对象,然后在另一端再次反序列化它。这样,C#将确保JSON有效。您要做的就是确保您的对象结构映射足够,以便正确地序列化和反序列化所有必要的属性。

使用结构化格式(例如JSON或XML)比发送任意字符串好得多。有已知的,经过测试的可靠方法可以对数据进行序列化和反序列化,并且您可以非常轻松地传输包含许多属性的复杂对象,也可以非常轻松地对其进行验证。如果您组成了其他基于文本的结构,则必须再次从头开始提供所有这些功能(或者您必须编写机器学习算法来尝试理解任意指令!:-))。这些方案的存在是有原因的,我会利用它们为您带来好处。