问题描述
我想向flask服务器发送一个json请求。我使用 UnityWebRequest
执行以下操作,
IEnumerator Post(string url,string bodyJsonString)
{
var request = new UnityWebRequest(url,"POST");
byte[] bodyRaw = Encoding.UTF8.GetBytes(bodyJsonString);
request.uploadHandler = (UploadHandler) new UploadHandlerRaw(bodyRaw);
request.downloadHandler = (DownloadHandler) new DownloadHandlerBuffer();
request.SetRequestHeader("Content-Type","application/json");
yield return request.SendWebRequest();
}
我使用下面的代码来创建json,
Dictionary<string,string> RootJson = new Dictionary<string,string>();
Dictionary<string,float> id_val = new Dictionary<string,float>();
Dictionary<string,byte[]> employeeData = new Dictionary<string,byte[]>();
Calibrationjson.Add("id",1);
imagesJson.Add("employeeData",encodedByte);
RootJson.Add("id",JsonConvert.SerializeObject(id_val.ToString()));
RootJson.Add("data",JsonConvert.SerializeObject(employeeData.ToString()));
StartCoroutine(Post("http://127.0.0.1:5000/emp_detail",JsonConvert.SerializeObject(RootJson.ToString())));
然而,尽管我每次都序列化了字典,但它并没有创建正确的 json。它在服务器中抛出以下错误,
System.Collections.Generic.Dictionary`2[System.String,System.String]
我错过了什么?
解决方法
从序列化代码中删除 ToString
:
RootJson.Add("id",JsonConvert.SerializeObject(id_val));
RootJson.Add("data",JsonConvert.SerializeObject(employeeData));
StartCoroutine(Post("http://127.0.0.1:5000/emp_detail",JsonConvert.SerializeObject(RootJson)));
对于不覆盖 ToString
的类型,它将返回类型名称,因此对于 Dictionary<string,string>()
,您将获得 "System.Collections.Generic.Dictionary`2[System.String,System .String]":
Console.WriteLine(new Dictionary<string,string>().ToString()); // prints System.Collections.Generic.Dictionary`2[System.String,System.String]