C# 解析类以用作参数
我有一些课程:C# 解析类以用作参数,c#,web-services,asp.net-3.5,C#,Web Services,Asp.net 3.5,我有一些课程: public class clsAnimal { public int ID { get; set; } public string Strain { get; set; } } public class clsHybridom { public int ID { get; set; } public string H
public class clsAnimal
{
public int ID { get; set; }
public string Strain { get; set; }
}
public class clsHybridom
{
public int ID { get; set; }
public string Haplo { get; set; }
}
object ReturnObject;
Session["clsAnimal"] = new clsAnimal();
ReturnObject = Activator.CreateInstance(((clsAnimal)Session["clsAnimal"]));
return clsDataProc.MyFunction(ReturnObject);
这些类将实例化到会话中:
Session["clsAnimal"] = new clsAnimal();
object ReturnObject;
Session["clsAnimal"] = new clsAnimal();
ReturnObject = Activator.CreateInstance(((clsAnimal)Session["clsAnimal"]));
return clsDataProc.MyFunction(ReturnObject);
并访问(如果存在更好的方法,请让我知道):
object ReturnObject;
Session["clsAnimal"] = new clsAnimal();
ReturnObject = Activator.CreateInstance(((clsAnimal)Session["clsAnimal"]));
return clsDataProc.MyFunction(ReturnObject);
有很多类似于这两个类的类,我有一个开关和请求实例化所需的类。实例类应解析为MyFunction
object ReturnObject;
Session["clsAnimal"] = new clsAnimal();
ReturnObject = Activator.CreateInstance(((clsAnimal)Session["clsAnimal"]));
return clsDataProc.MyFunction(ReturnObject);
有一个公共静态类,其函数用于整个项目,该类中应包含my functionMyFunction
object ReturnObject;
Session["clsAnimal"] = new clsAnimal();
ReturnObject = Activator.CreateInstance(((clsAnimal)Session["clsAnimal"]));
return clsDataProc.MyFunction(ReturnObject);
但是,唉!我不知道如何将这些类解析为functionMyFunction
object ReturnObject;
Session["clsAnimal"] = new clsAnimal();
ReturnObject = Activator.CreateInstance(((clsAnimal)Session["clsAnimal"]));
return clsDataProc.MyFunction(ReturnObject);
我的尝试是这样的:
object ReturnObject;
Session["clsAnimal"] = new clsAnimal();
ReturnObject = Activator.CreateInstance(((clsAnimal)Session["clsAnimal"]));
return clsDataProc.MyFunction(ReturnObject);
ASMX:
object ReturnObject;
Session["clsAnimal"] = new clsAnimal();
ReturnObject = Activator.CreateInstance(((clsAnimal)Session["clsAnimal"]));
return clsDataProc.MyFunction(ReturnObject);
公共静态类:
object ReturnObject;
Session["clsAnimal"] = new clsAnimal();
ReturnObject = Activator.CreateInstance(((clsAnimal)Session["clsAnimal"]));
return clsDataProc.MyFunction(ReturnObject);
public static string MyFunction( object o )
{
return Do_Some_Evil_Things_With_Parsed_Class();
}
显然,这不会发生,因为:
object ReturnObject;
Session["clsAnimal"] = new clsAnimal();
ReturnObject = Activator.CreateInstance(((clsAnimal)Session["clsAnimal"]));
return clsDataProc.MyFunction(ReturnObject);
- 无法从“clsAnimal”转换为“System.Type”
- 匹配的最佳重载方法 “System.Activator.CreateInstance(System.Type,params对象[])”已被删除 一些无效的参数
长话短说:如何将实例类解析为公共静态字符串MyFunction?听起来您好像在尝试用Xml将对象序列化为字符串。因此,您正在尝试构造System.Xml.Serialization.XmlSerializer。它想知道要序列化的对象的类型。如果您在编译时知道对象的类型(这似乎是您可以做到的),您可以这样做:
object ReturnObject;
Session["clsAnimal"] = new clsAnimal();
ReturnObject = Activator.CreateInstance(((clsAnimal)Session["clsAnimal"]));
return clsDataProc.MyFunction(ReturnObject);
clsAnimal a = ((clsAnimal)Session["clsAnimal"]);
var serializer = new XmlSerializer(typeof(clsAnimal));
serializer.Serialize(..., a);
在哪里。。。是你的StringStream还是别的什么。我想你已经把那部分搞定了。如果在编译时不知道类型,则使用GetType()
object ReturnObject;
Session["clsAnimal"] = new clsAnimal();
ReturnObject = Activator.CreateInstance(((clsAnimal)Session["clsAnimal"]));
return clsDataProc.MyFunction(ReturnObject);
如果要将其包装到函数中,有两种方法可以获取类型:
object ReturnObject;
Session["clsAnimal"] = new clsAnimal();
ReturnObject = Activator.CreateInstance(((clsAnimal)Session["clsAnimal"]));
return clsDataProc.MyFunction(ReturnObject);
1) 使用泛型。然后您可以得到类型为typeof(T):
object ReturnObject;
Session["clsAnimal"] = new clsAnimal();
ReturnObject = Activator.CreateInstance(((clsAnimal)Session["clsAnimal"]));
return clsDataProc.MyFunction(ReturnObject);
我希望我对这个问题理解得足够透彻,能有所帮助。也许这里的另一个解决方案是使用所有类都继承自的接口
object ReturnObject;
Session["clsAnimal"] = new clsAnimal();
ReturnObject = Activator.CreateInstance(((clsAnimal)Session["clsAnimal"]));
return clsDataProc.MyFunction(ReturnObject);
Public interface IMyfunctionInterface
{
public MyFunction();
}
然后,您可以对从该接口继承的所有类执行类似操作:
object ReturnObject;
Session["clsAnimal"] = new clsAnimal();
ReturnObject = Activator.CreateInstance(((clsAnimal)Session["clsAnimal"]));
return clsDataProc.MyFunction(ReturnObject);
Session["clsAnimal"] = new clsAnimal();
((IMyfunctionInterface)Session["clsAnimal"]).MyFunction();
只是一个想法 为什么不将typeof(clsAnimal)作为第二个参数传递给xmlserializer?为什么不停止使用
cls
作为所有类的前缀?作为一个类并不是一件特别的事情,你需要给所有的类加前缀,只是为了提醒你它们是类。同意JohnSaunders的观点,使用类型安全编程语言的现代IDE匈牙利符号是荒谬的,在类型上更是如此……很明显,我把关于我的意图的信息放在我的问题中是一个错误。请忽略序列化程序。问题是:“如何将类作为参数解析为函数?”您可以将“类的实例”传递给函数,也可以将类的“类型”传递给函数。GetType()就是这样做的。
object ReturnObject;
Session["clsAnimal"] = new clsAnimal();
ReturnObject = Activator.CreateInstance(((clsAnimal)Session["clsAnimal"]));
return clsDataProc.MyFunction(ReturnObject);