我有一个结构体,它有一个[System.Serializable]标记,看起来像这样:
[Serializable]
public struct User
{
public string name;
}
我想添加一个experiments属性,它是一个Dictionary<string, string>
。我不能使它成为另一个可串行化的结构体,因为它是动态变化的(在后端),并且键也包含-
。
但是,执行以下操作会使experiments
始终反序列化为null
。我还尝试使用IDictionary
类型。
[Serializable]
public struct User
{
public string name;
public Dictionary<string, string> experiments;
}
我已经确认服务器正在发送这个json:
{
"name": "Bob",
"experiments": {
"experiment-3532": "control"
}
}
FWIW,这就是我如何使用结构体
public IEnumerator GetUser(Action<User> callback, Action<string> errorCallback)
{
string url = "https://myurl.com/myurl/"; // fake endpoint
UnityWebRequest request = UnityWebRequest.Get(url);
request.SetRequestHeader("Content-Type", "application/json");
request.SetRequestHeader("Version", Application.version);
yield return request.SendWebRequest();
if (request.error == null)
callback(JsonUtility.FromJson<User>(request.downloadHandler.text));
else
errorCallback("Uh oh! Network error");
request.Dispose();
}
1条答案
按热度按时间vaj7vani1#
根据我在FromJson文档中看到的内容:
对象的字段必须具有序列化程序支持的类型。[..]仅支持普通类和结构
不支持字典。也检查这个答案。我发现自己在使用JSON时使用JSON.Net很舒服。它是最常用的库之一,它可能是你的选择。