首页 > 解决方案 > 创建实例时如何确定属性的类型?

问题描述

我正在使用 Unity 编写在线游戏。我还在为我的 HTTP 响应使用自定义响应形状,如下所示:

public class Response
{
    public string status;
    public List<string> messages;
    public List<T> data;
}

我想在收到 HTTP 响应时决定“数据”属性的类型。它可以是任何自定义类型。例如来自类型播放器:

public class Player
{
    public string id;
    public string name;
    public int gems;

    public Player(string id, string name, int gems)
    {
        this.id = id;
        this.name = name;
        this.gems = gems;
    }
}

因此,在这种情况下,响应的形状将如下所示:

public class Response
{
    public string status;
    public List<string> messages;
    public List<Player> data;
}

所以我可以像这样解析和分配它:

var player = JsonUtility.FromJson<Response>(response.ReadAsString()).data[0];

或用于其他用例,例如:

var players = JsonUtility.FromJson<Response>(response.ReadAsString()).data;

但是围绕代码的每个响应都会有所不同,我不想为每个响应创建这么多的类。

这甚至可能吗?有哪些选择或/和最好的方法?我该如何实施?

标签: c#unity3d

解决方案


不确定 Unity 是否喜欢这样,但您可以尝试使Response该类通用

[Serializable]
public class Response<T>
{
    public string status;
    public List<string> messages;
    public List<T> data;
}

然后使用

var players = JsonUtility.FromJson<Response<Player>>(response.ReadAsString()).data;
var player1 = players[0];

推荐阅读