我有一些课程:
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
但是唉!我不知道如何将这些类解析为函数 MyFunction
我的尝试类似于:
ASMX:
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();
}
显然这不会发生,因为:
长话短说:如何将实例化的类解析为公共静态字符串MyFunction ?
答案 0 :(得分:1)
听起来您正在尝试将对象序列化为字符串。那么你试图构建一个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)
我希望我能够很好地理解这个问题。
答案 1 :(得分:0)
这里的另一个解决方案可能是使用所有类继承的接口。
Public interface IMyfunctionInterface
{
public MyFunction();
}
然后,您可以使用从此接口继承的所有类来执行此类操作:
Session["clsAnimal"] = new clsAnimal();
((IMyfunctionInterface)Session["clsAnimal"]).MyFunction();
只是一个想法...