【问题标题】:C# Is it possible to get actual type out of a string representing that type? [duplicate]C# 是否可以从表示该类型的字符串中获取实际类型? [复制]
【发布时间】:2019-07-07 22:44:52
【问题描述】:

我有字符串“Car”,我想从中获取类型Car。我的班级车是:

namespace MySolution.MyProjectA
{
    public class Car
    {
      ...
    }
}

我尝试获取这样的类型,但它返回 null:

Type myType = Type.GetType("MySolution.MyProjectA.Car"); // returns null

给定一个代表我的类型的字符串变量(即“Car”),我如何获得它的类型 Car?

更新和解决方案

感谢@AsafPala 的建议 (Type.GetType("namespace.a.b.ClassName") returns null),我得到了它的工作。事实证明,如果您从解决方案中的另一个项目(这是另一个程序集)调用 GetType,您还必须提供程序集名称。

由于 MySolution 有 2 个项目 MyProjectA 和 MyProjectB,它们是同一解决方案中的 2 个单独的项目(或程序集),因此您需要提供您的类型的完全指定的程序集名称(即 MySolution.MyProjectA.Car)和程序集名称(即 @ 987654328@) 以逗号分隔如下:

Type myType = Type.GetType("MySolution.MyProjectA.Car,MySolution.MyProjectA");

更新和解决方案

由于我在另一个项目(与程序集相同)中调用此代码,我需要提供完全指定的类型名称和程序集名称,以逗号分隔,如下所示:

namespace MySolution.MyProjectB
{
    public class MyClass
    {
        ...
        ...
        public void MyMethod()
        {
             // this wont work, I get null back
             //Type myType = Type.GetType("MySolution.MyProjectA.Car");
             Type myType = Type.GetType("MySolution.MyProjectA.Car,MySolution.MyProjectA"); //this works
             ...
        }
    }
}

【问题讨论】:

  • 请编辑您的existing question 并添加更多详细信息,而不是针对同一问题要求新的。即使这个问题也没有显示相关的细节;你应该在班级周围显示namespace(它可能与"MySolution.MyProject"不同)。
  • @RufusL 命名空间是正确的,我也按照您的要求添加了该信息。问题很简单,不知道还有什么不清楚的。另外,它是前一个的简化版本(所以我不再问它),我只关注一件事,即从字符串“Car”中获取实际类型的 Car。
  • 你从哪里打电话给GetType?你的代码对我来说很好。

标签: c# .net-assembly typeof gettype


【解决方案1】:

是的。您需要先将对象序列化为字符串。您可以使用 json 或 xml 作为序列化程序类型。

然后在另一方面,您使用相同的序列化器对象将字符串反序列化为您的类的实例。

https://www.newtonsoft.com/json/help/html/DeserializeObject.htm

Account account = JsonConvert.DeserializeObject<Account>(json); 

http://www.janholinka.net/Blog/Article/11

XmlSerializer 序列化器 = new XmlSerializer(typeof(List), 新的 XmlRootAttribute("Products"));

StringReader stringReader = new StringReader(xmlString);

列出产品列表 = (List)serializer.Deserialize(stringReader);

然后反序列化后就可以得到对象的类型

【讨论】:

  • 这个问题是关于从字符串中获取Type,而不是序列化。
  • 任意字符串的类型都是字符串。我没有关注
  • 查看Type.GetType(String)的文档
  • 知道了。我误解了这个问题。但我似乎无法删除答案
  • 在顶部的评论之后,看起来同一个问题,并且有几个答案
猜你喜欢
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-26
  • 2022-08-10
  • 2022-01-12
  • 1970-01-01
相关资源
最近更新 更多