C# 在方法中使用方法类型反序列化文本
我正在尝试为我的unity游戏开发保存槽创建一个通用加载/保存类型的库。我不是每次都创建实现,而是尝试创建一个通用的实现来帮助测试 我有这个方法:C# 在方法中使用方法类型反序列化文本,c#,json.net,C#,Json.net,我正在尝试为我的unity游戏开发保存槽创建一个通用加载/保存类型的库。我不是每次都创建实现,而是尝试创建一个通用的实现来帮助测试 我有这个方法: public List<T> Load<T>() { string rawSaveData = _dataAccessLayer.Load(); if (!string.IsNullOrWhiteSpace(rawSaveData)) List<T> loadedData = Jso
public List<T> Load<T>()
{
string rawSaveData = _dataAccessLayer.Load();
if (!string.IsNullOrWhiteSpace(rawSaveData))
List<T> loadedData = JsonConvert.DeserializeObject<T>(rawSaveData);
}
无需担心文件的加载方式,它只是从文本文件加载到字符串,然后反序列化,但这就是问题所在您选择了正确的路径,但代码中有两个错误: 1.如果不能在一行内声明变量(这没有意义,因为在您可以使用它之前它将超出范围),那么请在if之外声明
列表
2.您的结果类型为List
而不是T
,因此反序列化为List
:
列表加载数据;
如果(!string.IsNullOrWhiteSpace(rawSaveData))
loadedData=JsonConvert.DeserializeObject(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;
}
公共列表加载()
{
列出加载的数据;
试一试{
字符串rawSaveData=_dataAccessLayer.Load();
如果(!string.IsNullOrWhiteSpace(rawSaveData))
loadedData=JsonConvert.DeserializeObject(rawSaveData);
}
抓住{
loadedData=新列表();
}
返回加载的数据;
}
您的问题是什么?如何反序列化rawSavaData中包含的数据以键入@AshkanMobayenKhiabani@JohneyBronswicAppleton,您将数据反序列化为键入T
(假设rawSaveData中的数据是T
对象的数据):JsonConvert.DeserializeObject
。那么,代码行将产生一个编译器错误。读一下。然后查看要为其分配反序列化结果的loadedData
变量的类型。然后再次从编译器读取错误消息。试着去理解它。。。
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;
}