我正在尝试为我的统一游戏开发保存槽创建通用的加载/保存类型的库。我不是在每次创建实现,而是在尝试创建一个通用的实现,以至少帮助测试。
我有这种方法:
public List<T> Load<T>()
{
string rawSaveData = _dataAccessLayer.Load();
if (!string.IsNullOrWhiteSpace(rawSaveData))
List<T> loadedData = JsonConvert.DeserializeObject<T>(rawSaveData);
}
由于列表需要强类型,所以我可能正在使用List<T>
反序列化。
如何反序列化rawSavaData中包含的数据以键入T
这项工作至关重要,因为在我的项目中使用此方法的原因是:
LevelManager.Load<SaveSlotType>();
LevelManager.Load<DifferentSaveSlot>()
无需担心文件的加载方式,它只是从文本文件加载到字符串中,然后反序列化,但这就是问题所在
答案 0 :(得分:1)
您选择了正确的路径,但是您的代码中有两个错误:
1。if不能在一行内声明变量(它没有意义,因为在使用它之前它将超出范围),因此请在if之外声明List<T>
2。您的结果属于List<T>
类型,而不是T
类型,因此反序列化为List<T>
:
List<T> loadedData;
if (!string.IsNullOrWhiteSpace(rawSaveData))
loadedData = JsonConvert.DeserializeObject<List<T>>(rawSaveData);
整个代码如下:
public List<T> Load<T>()
{
List<T> loadedData;
try{
string rawSaveData = _dataAccessLayer.Load();
if (!string.IsNullOrWhiteSpace(rawSaveData))
loadedData = JsonConvert.DeserializeObject<List<T>>(rawSaveData);
}
catch{
loadedData = new List<T>();
}
return loadedData;
}