You need to enable JavaScript to run this app. Unity中Dictionary转合法JSON发送至Flask服务器异常问题排查
优惠活动
大模型
产品
解决方案
定价
更多

Unity中Dictionary转合法JSON发送至Flask服务器异常问题排查

操作疏漏明细
  • 核心逻辑错误:序列化调用顺序完全颠倒
    所有传入JsonConvert.SerializeObject()的参数,都是对象调用.ToString()的返回值。C#中字典类型默认的ToString()方法不会输出字典内部的键值对内容,只会返回类型签名,也就是服务器报错抛出的System.Collections.Generic.Dictionary2[System.String,System.String]`。等于全程没有把实际业务对象交给序列化器,只是把“对象的类型名称文本”做了字符串序列化,自然生成不出合法JSON结构。
  • 类型定义不匹配
    根JSON容器被定义为Dictionary<string, string>,但实际要存储的id数值、嵌套字典、二进制字节数据都不属于string类型,哪怕修正了ToString的问题,也会触发类型转换异常。
  • 赋值链路断裂
    代码中定义的变量是id_val、employeeData,但赋值环节突然引用了未声明的CalibrationJson、imagesJson,实际的业务数据根本没有写入待发送的JSON结构中。
  • 二进制数据处理缺失
    字节数组是二进制内容,无法直接被JSON格式承载,必须先转换为Base64字符串才能合法嵌入JSON结构,否则序列化环节会直接抛出格式错误。
修正后的可运行代码
// 根容器改为支持任意值类型的字典,不要限定值为string
Dictionary<string, object> rootJson = new Dictionary<string, object>();

// 构建id嵌套对象
Dictionary<string, float> idVal = new Dictionary<string, float>();
idVal.Add("id", 1);

// 构建员工数据:先把字节数组转Base64字符串
string base64Data = Convert.ToBase64String(encodedByte);
Dictionary<string, string> employeeData = new Dictionary<string, string>();
employeeData.Add("employeeData", base64Data);

// 直接将对象存入根容器,不要调用ToString()
rootJson.Add("id", idVal);
rootJson.Add("data", employeeData);

// 直接序列化根对象,不要对根对象调用ToString()
string requestBody = JsonConvert.SerializeObject(rootJson);
StartCoroutine(Post("http://127.0.0.1:5000/emp_detail", requestBody));

原有的Post协程逻辑没有问题,只要传入上面生成的合法JSON字符串,就能正常完成和Flask服务端的POST交互。

内容的提问来源于stack exchange,提问作者user1241241

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.04 19:27:01