我的 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数据应该是啥样的数据