【问题标题】:Create an object with type defined by string创建一个类型由字符串定义的对象
【发布时间】:2014-09-11 15:38:24
【问题描述】:

我正在尝试使用从字符串定义的类型创建对象的实例。

这是我完成的代码(注意我在 wcf 网络服务中):

namespace CreeContact.WebServices
{

    public class BaseObject  
    {

    }

    public class test : BaseObject
    {
        public string name;
        public test()
        {
            name = "Default";
        }
    }

    [ServiceContract(Namespace = "")]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public class Object
    {
        [OperationContract]
        [WebGet(ResponseFormat = WebMessageFormat.Json)]
        public void createobject(string classname, string idobjectsession)
        {

            ***ERROR HERE (Value cannot be null. Type.GetType(classname) return null) ----- > *** BaseObject objecttocreate = (BaseObject)Activator.CreateInstance(Type.GetType(classname));
            HttpContext.Current.Session[idobjectsession] = objecttocreate;
        }


    }
}

所以当我使用参数“test”(我想要创建实例的类的名称)调用(从 javascript)我的 web 服务方法“CreateObject”时,Type.GetType(classname) 总是返回 null...

我被困在这里,我不确定这是否是实现我的目标的好方法:创建一个由字符串定义的类型的类的实例

错误消息:值不能为空。 参数名称:类型

【问题讨论】:

  • 在方法中放置一个 try/catch 并发布确切的异常/内部异常被抛出。您还必须对类名使用字符串类型吗?为什么不直接传递一个类型呢

标签: c# asp.net .net wcf


【解决方案1】:

类类型需要是“Full.CLASSName”甚至更好的“Full.CLASSName,Assembly”才能动态创建类。我相信,对于前者,类型需要在同一个程序集中。所以 JS 可能会传递一些东西,但你必须确保类型与 .NET 期望的类型名称匹配。

【讨论】:

  • 我验证了,字符串 = 为“test”。我怎样才能验证装配?顺便说一句
  • 程序集只需要匹配程序集名称(DLL 名称)。如果您的类 TestClass 在命名空间 Some.Namespace 中,并且 DLL 是 TestProject.DLL,那么您的类型名称应该是“Some.Namespace.TestClass,TestProject”。如果它在 GAC 中,那么您需要强类型命名。
猜你喜欢
  • 1970-01-01
  • 2018-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-07
  • 1970-01-01
  • 2015-10-14
  • 1970-01-01
相关资源
最近更新 更多