c# - 创建实例时如何确定属性的类型?
问题描述
我正在使用 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;
但是围绕代码的每个响应都会有所不同,我不想为每个响应创建这么多的类。
这甚至可能吗?有哪些选择或/和最好的方法?我该如何实施?
解决方案
不确定 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];
推荐阅读
- c++ - 共享指针存储在一个智能指针向量内,另一个对象存储在共享指针中(Shareption)
- path - 如何更改 Julia 日志路径?
- forms - Xamarin Forms 如何将逗号添加到将使用数据(整数)不断更新的输入字段
- java - 'On Action' 是否指默认操作?
- sitecore - Sitecore 添加链接作为渲染变体的部分
- rust - 在 Rust 中使用以前借用的 Result
- sql - 信息是否通过 CREATE TABLE 更新本身传递到新表?
- java - 无法从谷歌 url 下拉 chromedriver 驱动程序
- php - 需要有关如何设置允许仅在选择特定帐户时显示某些选定选项值的下拉菜单的建议?
- kotlin - 如果在 kotlin 中指定了某个大小,如何为数据类设置值?