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

Posted

技术标签:

【中文标题】我的 json 应该是啥样的?使用 Web 套接字发送消息【英文标题】:What should my json look like? Sending messages with web sockets我的 json 应该是什么样的?使用 Web 套接字发送消息 【发布时间】:2018-08-01 20:28:37 【问题描述】: 我有两个控制台应用程序 - 一个 Web 套接字服务器和一个客户端。 客户端控制台应用具有“Light”属性,其状态为 on 或 off / true 或 false

流程:

    客户端向服务器发送消息,请求“Light” 打开。 服务器随后会以消息响应,并带有已决定的状态(开启或关闭) 客户端收到响应并设置灯的状态

我想以 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 的方式是否合理?而不是我只发送纯文本消息,例如“你能打开我的灯吗”?

【问题讨论】:

您只是在消息字符串周围缺少花括号。 @Daredevil 这么喜欢 - “数据”...?如果是,为什么? :O 我处理所有事情的逻辑和方式是否有意义? 如果你需要问为什么,那么请去学习 JSON 教程并学习语法和结构。但是......简短的回答:这是因为 JSON 中的所有内容都必须包装在对象或数组中。您不能以属性名称开始一段 JSON - 它的属性是什么?没有。它一定是某物的属性。所以你可以选择 "type": "light", "state": true "data": "type": "light", "state": true 。第二个更冗长,是否真的增加了任何价值是值得怀疑的。 顺便说一句,您可以验证您在jsonlint.com 编写的任何 JSON,但无论如何您都不应该手动编写 JSON。始终序列化 C# 对象,然后在另一端再次反序列化它。这样,C# 将负责确保 JSON 有效。您所要做的就是确保您的对象结构映射足够,以便所有必要的属性都能正确序列化和反序列化。 我会说使用 JSON 或 XML 等结构化格式比发送任意字符串要好得多。序列化和反序列化数据有已知、经过测试和可靠的方法,您可以非常轻松地传输包含许多属性的复杂对象,也可以非常轻松地验证它们。如果您构建其他一些基于文本的结构,您必须从头开始再次为自己提供所有这些功能(或者您必须编写机器学习算法来尝试理解任意指令!:-))。这些方案的存在是有原因的,我会利用它们来为您服务。 【参考方案1】:
"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 等结构化格式比发送任意字符串要好得多。序列化和反序列化数据有已知、经过测试和可靠的方法,您可以非常轻松地传输包含许多属性的复杂对象,也可以非常轻松地验证它们。如果您构建其他一些基于文本的结构,您必须从头开始再次为自己提供所有这些功能(或者您必须编写机器学习算法来尝试理解任意指令!:-))。这些方案的存在是有原因的,我会利用它们来为您服务。

【讨论】:

以上是关于我的 json 应该是啥样的?使用 Web 套接字发送消息的主要内容,如果未能解决你的问题,请参考以下文章

layui在加载时,从后台返回的Json数据应该是啥样的数据

我的 Kendo 数据源架构必须是啥样的?

使用 heroku 在生产中部署媒体和静态的 django 设置和 url 应该是啥样的?

GraphQL 文件上传请求应该是啥样的?

std::vector 在内存中是啥样的?

API Gateway 中 AWS Firehose PutRecordBatch 的映射模板应该是啥样的?