C#是否可以从表示该类型的字符串中获取实际类型?

时间:2019-02-14 00:11:54

标签: c# .net-assembly typeof gettype

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

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

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

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

给出一个表示我的类型(即“汽车”)的字符串变量,如何获得其类型汽车?

更新和解决方案

感谢@AsafPala在这里提供的建议(Type.GetType("namespace.a.b.ClassName") returns null),让我可以使用它。事实证明,如果要从解决方案中的另一个项目(另一个程序集)调用GetType,则还必须提供程序集名称。

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

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
             ...
        }
    }
}

1 个答案:

答案 0 :(得分:-3)

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

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

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

new Promise(...

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

  

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

     

StringReader stringReader =新的StringReader(xmlString);

     

列出productList =   (列表)serializer.Deserialize(stringReader);

然后反序列化之后,您可以获取对象的类型