unity3d 如何使用字典属性反序列化[System.Serializable]结构

kqqjbcuj  于 2022-11-15  发布在  其他
关注(0)|答案(1)|浏览(186)

我有一个结构体,它有一个[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();
    }
vaj7vani

vaj7vani1#

根据我在FromJson文档中看到的内容:
对象的字段必须具有序列化程序支持的类型。[..]仅支持普通类和结构
不支持字典。也检查这个答案。我发现自己在使用JSON时使用JSON.Net很舒服。它是最常用的库之一,它可能是你的选择。

相关问题