[英]How to pass a class as a parameter
我有以下方法,从目录中读取 JSON 并将 JSON 反序列化为 C# class object。
public static JObject readJson(string fileName)
{
string JSON = "";
List<string> keyList = new List<string>();
using (StreamReader r = new StreamReader(fileName))
{
JSON = r.ReadToEnd();
}
JObject parsed = JObject.Parse(JSON);
var name = parsed["2"];
Numbers deserializedClass = JsonConvert.DeserializeObject<Numbers>(name.ToString());
return parsed;
}
在这里你可以看到,我使用 class 调用Numbers
。 我将单独的 JSON 文件名传递给上述方法,基于此我还需要传递 Class 以将 JSON 转换为 C# object。如何将 class 作为通用传递给上述方法? 然后我想我可以修改这一行,
var deserializedClass = JsonConvert.DeserializeObject<AnyClass>(name.ToString());
有可能吗?
尝试这个:
public static JObject readJson<T>(string fileName)
{
string JSON = "";
List<string> keyList = new List<string>();
using (StreamReader r = new StreamReader(fileName))
{
JSON = r.ReadToEnd();
}
JObject parsed = JObject.Parse(JSON);
var name = parsed["2"];
Numbers deserializedClass = JsonConvert.DeserializeObject<T>(name.ToString());
return parsed;
}
https://learn.microsoft.com/en-us/do.net/standard/generics/
https://learn.microsoft.com/en-us/do.net/csharp/fundamentals/types/generics
此方法使用 Generics 并将采用您指定的类型并返回该类型的 object。
public static T readJson<T>(string fileName)
{
var JSON = string.Empty;
using (var r = new StreamReader(fileName))
{
JSON = r.ReadToEnd();
}
var parsed = JObject.Parse(JSON);
var name = parsed["2"];
var deserializedClass = JsonConvert.DeserializeObject<T>(name.ToString());
return deserializedClass;
}
用法:
var resultObject = readJson<Number>(fileName);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.