在C#中使用变量作为列表类型

时间:2014-02-17 07:31:00

标签: c# json refactoring generic-collections

我目前正在使用一个列表来处理一个JSON字符串,该字符串适用于此实例,如下所示。我想要做的是使这些处理转换的方法完全通用,这样我就可以将它们用于多个JSON字符串。

这是我现有代码的片段。

public class GetPerson
{
    public string fooName { get; set; }
    public string fooAddress { get; set; }
    public string fooPosition { get; set; }
}
public class GetPosition
{
    public string fooTitle { get; set; }
    public string fooDepartment { get; set; }
    public string fooSalary { get; set; }
}

    private static List<GetPerson> ConvertToList(string jsonString)
    {
        List< listJson = new List<JsonObject>();
        listJson = (List<GetPerson>)JsonConvert.DeserializeObject<List<GetPerson>>(jsonString);
        return listJson;
    }

这只是一个快速的示例,但List<GetPerson>是我需要的通用,所以它可以重复使用,因为它代表GetPosition显然不适用于此,因为我希望能够迭代我的代码相应地更改类型。

有没有办法可以将变量指定为类型?我看到了另一个关于此的问题,但没有详细说明。或者还有另一种方法可以实现这一目标吗?

提前致谢。

2 个答案:

答案 0 :(得分:1)

非常简单。你只需要使ConvertToList()泛型并在ConvertToList()中将所需的类作为Type Paramter传递

private static List<T> ConvertToList<T>(string jsonString)
{
    var listJson = new List<JsonObject>();
    listJson = (List<T>)JsonConvert.DeserializeObject<List<T>>(jsonString);
    return listJson;
}

var personList = ConvertToList<GetPerson>(jsonString);
var positionList = ConvertToList<GetPosition>(jsonString);

答案 1 :(得分:0)

您可以使用泛型来帮助使ConvertToList函数可以重用于不同类型

private static List<T> ConvertToList<T>(string jsonString)
{
    return (List<T>)JsonConverty.DeserializeObject<List<T>>(jsonString();
}

您现在可以使用GetPersonGetPosition作为通用类型来调用它。

var listOfPeople = ConvertToList<GetPerson>(personJson);
var listOfPositions = ConvertToList<GetPosition>(positionJson);

您可以在MSDN上了解有关泛型的更多信息。

此外,如果您要做的就是[de]序列化JSON,您可能需要考虑第三方库,例如JSON.netJilServiceStack.Text ,所有这些功能都内置了您正在尝试的功能。