从字典中正确地将字符串转换为 Json

问题描述

我想向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]

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...