我在代码中经常使用以下代码块。我想将其放在一个函数中,但是它不起作用。
using (StreamReader streamReader = new StreamReader(path, true))
{
string json = streamReader.ReadToEnd();
userdata = JsonConvert.DeserializeObject<List<User>>(json);
streamReader.Close();
}
//List<User> userdata = new List<User>();//this is a comment
我正在反序列化包含对象数组的json文件。
这是我编写的功能。
static void deserializeuser(List<dynamic> @params, string y)
{
using (StreamReader streamReader = new StreamReader(y, true))
{
string json = streamReader.ReadToEnd();
@params = JsonConvert.DeserializeObject<List<dynamic>>(json);
streamReader.Close();
}
}
此函数没有显示错误,但我不知道如何调用它。
答案 0 :(得分:0)
尝试
public List<T> GetFromPath<T>(string path)
{
List<T> ret = null;
try
{
using (StreamReader streamReader = new StreamReader(path, true))
{
string json = streamReader.ReadToEnd();
ret = JsonConvert.DeserializeObject<List<T>>(json);
streamReader.Close();
}
}
catch(Exception ex)
{
// Log here
throw;
}
return ret;
}
或
public List<T> GetFromPath<T>(string path)
{
List<T> ret = null;
try
{
if(File.Exists(path))
ret = JsonConvert.DeserializeObject<List<T>>(File.ReadAllText(path));
}
catch(Exception ex)
{
// Log here
throw;
}
return ret;
}
修改
将其设为通用调用,使用
List<User> list = GetFromPath<User>("somepath");
答案 1 :(得分:0)
这应该有效:
private static List<T> DeserializeList<T>(string path)
{
List<T> result = null;
using (var streamReader = new StreamReader(path, true))
{
string json = streamReader.ReadToEnd();
result = JsonConvert.DeserializeObject<List<T>>(json);
streamReader.Close();
}
return result;
}
...
List<User> userdata = DeserializeList<User>(path);
答案 2 :(得分:0)
一种更通用的功能
private static T GetTypedDataFromFile<T>(string path)
{
T result = null;
// I prefer C# 8.0 using syntax here.
// If your C# version is older, please revert to original with brackets
using var streamReader = new StreamReader(path, true);
string json = streamReader.ReadToEnd();
result = JsonConvert.DeserializeObject<T>(json);
streamReader.Close();
return result;
}
然后致电
List<User> users = DeserializeList<List<User>>(path);