我目前正在使用一个列表来处理一个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显然不适用于此,因为我希望能够迭代我的代码相应地更改类型。
有没有办法可以将变量指定为类型?我看到了另一个关于此的问题,但没有详细说明。或者还有另一种方法可以实现这一目标吗?
提前致谢。
答案 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();
}
您现在可以使用GetPerson
和GetPosition
作为通用类型来调用它。
var listOfPeople = ConvertToList<GetPerson>(personJson);
var listOfPositions = ConvertToList<GetPosition>(positionJson);
您可以在MSDN上了解有关泛型的更多信息。
此外,如果您要做的就是[de]序列化JSON,您可能需要考虑第三方库,例如JSON.net,Jil或ServiceStack.Text ,所有这些功能都内置了您正在尝试的功能。