解析一个类,使其作为参数起作用
本文关键字:起作用 参数 一个 | 更新日期: 2023-09-27 18:14:01
我有一些类:
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; }
}
这些类实例化为session:
Session["clsAnimal"] = new clsAnimal();
和访问方式(如果有更好的方法,请告诉我):
((clsAnimal)Session["clsAnimal"])
有很多类像这两个,我有一个开关,并通过请求实例化所需的类。实例化类应该解析为MyFunction。
有一个公共静态类,在整个项目中使用函数,在这个类中应该是我的函数MyFunction但唉!我不知道如何将这些类解析为function MyFunction
我的尝试是这样的:
ASMX :
object ReturnObject;
Session["clsAnimal"] = new clsAnimal();
ReturnObject = Activator.CreateInstance(((clsAnimal)Session["clsAnimal"]));
return clsDataProc.MyFunction(ReturnObject);
public static class:
public static string MyFunction( object o )
{
return Do_Some_Evil_Things_With_Parsed_Class();
}
显然这不会发生,因为:
- 无法从' classanimal '转换为'System '。类型的
- 匹配的最佳重载方法"System.Activator.CreateInstance(系统。类型,参数对象[])'有一些无效参数
长话短说:如何解析实例类到公共静态字符串MyFunction?
听起来您正在尝试将对象Xml序列化为字符串。因此,您正在尝试构造System.Xml.Serialization.XmlSerializer。它想知道要序列化的对象的类型。如果您在编译时知道对象的类型,您可以这样做:
clsAnimal a = ((clsAnimal)Session["clsAnimal"]);
var serializer = new XmlSerializer(typeof(clsAnimal));
serializer.Serialize(..., a);
的地方……是StringStream之类的。我想你已经记住这部分了。如果在编译时不知道类型,可以使用GetType()
object o = Session["clsAnimal"]; // No idea what this type is!
var serializer = new XmlSerializer(o.GetType()); // That's okay, just get the type at runtime
serializer.Serialize(..., o);
如果你想把它包装在一个函数中,有两种方法可以获得类型:
1)使用泛型。然后你可以得到typeof(T):
public static string XMLSerialize<T>(T objectToSerialize)
2)使用object,然后GetType()
public static string XMLSerialize(object objectToSerialize)
我希望我很好地理解了这个问题,对你有帮助。
也许这里的另一个解决方案是使用所有类都继承的接口。
Public interface IMyfunctionInterface
{
public MyFunction();
}
然后你可以对所有从这个接口继承的类做这样的事情:
Session["clsAnimal"] = new clsAnimal();
((IMyfunctionInterface)Session["clsAnimal"]).MyFunction();
只是一个想法…