解析一个类作为参数

时间:2014-07-21 18:06:08

标签: 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 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();
    }

显然这不会发生,因为:

  • 无法从'clsAnimal'转换为'System.Type'
  • 最佳重载方法匹配 'System.Activator.CreateInstance(System.Type,params object [])'有 一些无效的论点

长话短说:如何将实例化的类解析为公共静态字符串MyFunction

2 个答案:

答案 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();

只是一个想法...