Unity 怎么把数组对象形式的数据 发送给Websocket ,数据如下{"code":"tjcg","message":[{"userId":"5","score":89},{"userId":"6","score":70}]}
时间: 2025-07-04 22:21:45 浏览: 4
在 Unity 中,你可以使用 `System.Text.Json` 或 `Newtonsoft.Json` 等库将数组对象形式的数据序列化为 JSON 字符串,然后通过 WebSocket 发送。以下是完整的示例代码:
### 示例代码
```csharp
using System;
using System.Collections.Generic;
using System.Text;
using UnityEngine;
using WebSocketSharp; // 使用 WebSocketSharp 库
[Serializable]
public class MessageItem
{
public string userId;
public int score;
}
[Serializable]
public class WebSocketData
{
public string code;
public List<MessageItem> message;
}
public class WebSocketSender : MonoBehaviour
{
private WebSocket ws;
void Start()
{
// 连接到 WebSocket 服务器
ws = new WebSocket("ws://your-websocket-server-url");
ws.OnOpen += (sender, e) => Debug.Log("WebSocket Connected");
ws.OnMessage += (sender, e) => Debug.Log("Received: " + e.Data);
ws.OnError += (sender, e) => Debug.LogError("Error: " + e.Message);
ws.OnClose += (sender, e) => Debug.Log("WebSocket Disconnected");
ws.Connect();
// 准备数据
var data = new WebSocketData
{
code = "tjcg",
message = new List<MessageItem>
{
new MessageItem { userId = "5", score = 89 },
new MessageItem { userId = "6", score = 70 }
}
};
// 序列化为 JSON 字符串
string json = JsonUtility.ToJson(data);
// 发送数据
if (ws.ReadyState == WebSocketState.Open)
{
ws.Send(json);
Debug.Log("Sent: " + json);
}
}
void OnDestroy()
{
if (ws != null)
{
ws.Close();
}
}
}
```
### 说明
1. **定义数据结构**:
- `MessageItem` 类表示数组中的每个对象(`userId` 和 `score`)。
- `WebSocketData` 类表示整个 JSON 数据结构(`code` 和 `message` 数组)。
2. **序列化数据**:
- 使用 `JsonUtility.ToJson` 将 `WebSocketData` 对象序列化为 JSON 字符串。
3. **发送数据**:
- 通过 `WebSocketSharp` 库的 `ws.Send(json)` 方法发送 JSON 字符串。
### 注意事项
1. **WebSocketSharp 库**:
- 需要从 NuGet 或 GitHub 下载 `WebSocketSharp` 库并导入到 Unity 项目中。
- 替代方案:Unity 2021+ 支持 `UnityWebRequest` 的 WebSocket(需安装 `WebSocket` 模块)。
2. **JSON 序列化**:
- `JsonUtility` 是 Unity 内置的轻量级 JSON 工具,但功能有限(如不支持字典)。
- 如需更复杂的 JSON 操作,建议使用 `Newtonsoft.Json`(通过 NuGet 导入)。
3. **异步处理**:
- WebSocket 操作是异步的,建议在协程或异步方法中处理发送和接收逻辑。
### 替代方案(使用 Newtonsoft.Json)
如果需要更灵活的 JSON 处理,可以改用 `Newtonsoft.Json`:
```csharp
using Newtonsoft.Json;
// 序列化
string json = JsonConvert.SerializeObject(data);
// 反序列化(接收时)
WebSocketData receivedData = JsonConvert.DeserializeObject<WebSocketData>(json);
```
### 总结
- 定义对应的数据结构类。
- 使用 JSON 库序列化数据。
- 通过 WebSocket 发送 JSON 字符串。
阅读全文
相关推荐
















