{ "answerId": "1", "topicId": "1" }, { "answerId": "2", "topicId": "2" }用unity 将数据转为byte[] 便与wwwFrom1.AddBinaryData("topicHistoryAddBeans",null);发送数据
时间: 2025-05-26 07:38:39 浏览: 11
### 将 JSON 数据转换为 Byte 数组并使用 `AddBinaryData` 方法发送
在 Unity 中,可以通过序列化机制将 JSON 数据转换为字节数组,并通过 `WWWForm.AddBinaryData` 方法将其作为二进制数据附加到请求中。以下是具体实现过程:
#### 序列化 JSON 到字节数组
要将 JSON 转换为字节数组,可以先利用 `JsonUtility.ToJson` 或者第三方库(如 Newtonsoft.Json)来生成字符串形式的 JSON,再通过编码方式(如 UTF-8)将其转换为字节数组。
```csharp
using System.Text;
using UnityEngine;
public static byte[] JsonToByteArray(object obj)
{
string jsonString = JsonUtility.ToJson(obj); // 使用 Unity 的内置工具将对象转换为 JSON 字符串
return Encoding.UTF8.GetBytes(jsonString); // 将 JSON 字符串转换为字节数组
}
```
此函数接受一个对象参数,该对象会被自动序列化为 JSON 并返回对应的字节数组[^1]。
#### 创建 WWWForm 并添加 Binary Data
一旦有了字节数组,就可以创建 `WWWForm` 对象并将字节数组传递给 `AddBinaryData` 方法。
```csharp
using UnityEngine.Networking;
public void SendJsonAsBinary()
{
var myObject = new MyJsonObject
{
IntValue = 123,
BoolValue = true,
StringValue = "测试字符串",
DoubleValue = 456.789f,
ArrayDouble = new float[] { 0, 338, 115 },
ArrayString = new List<MyNestedObject>
{
new MyNestedObject { ArrayName = "第一个嵌套对象", ArrayDouble = 7.89f },
new MyNestedObject { ArrayName = "第二个嵌套对象", ArrayDouble = 1.23f }
}
};
byte[] jsonData = JsonToByteArray(myObject);
WWWForm form = new WWWForm();
form.AddBinaryData("json_data", jsonData, "data.json", "application/json");
UnityWebRequest request = UnityWebRequest.Post("http://example.com/upload", form);
request.SendWebRequest().completed += operation => Debug.Log(request.downloadHandler.text);
}
```
在此代码片段中:
- 定义了一个复杂的数据结构 `myObject`,它包含了多种类型的字段以及嵌套的对象列表。
- 使用之前定义的 `JsonToByteArray` 函数将对象转换为字节数组。
- 创建了 `WWWForm` 实例,并调用了 `AddBinaryData` 方法指定键名、字节数组及其 MIME 类型[^1]。
#### 处理服务器端接收逻辑
当服务器接收到上传的二进制数据时,通常会按照指定的内容类型解析回原始 JSON 字符串。随后可以根据业务需求进一步反序列化处理。
---
###
阅读全文
相关推荐


















