繁体   English   中英

如何将 class 作为参数传递

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM