如何将此代码ob块转换为函数?

时间:2020-11-08 07:09:03

标签: c# json list

我在代码中经常使用以下代码块。我想将其放在一个函数中,但是它不起作用。

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();
        }

    }

此函数没有显示错误,但我不知道如何调用它。

3 个答案:

答案 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);