解析一个类,使其作为参数起作用

本文关键字:起作用 参数 一个 | 更新日期: 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();

只是一个想法…