关于NHibernate的IList的反序列化
NHibernate返回IList结果集是常有的事,但在webservice一类的交互中,IList结果集无法序列化为xml字符串返回给客户端,除非你指定所有可能的类型
[Serializable]
public class Product
{....
我还是倾向于XML序列化,被序列化的类不需要什么特别声明,当然更重要的是几乎所有的开发语言都能处理XML。于是我尝试寻找将结果集转为XML的方法。
通过测试我知道,泛型的IList<T>是可以进行XML序列化。在NHibernate1.2版本已支持泛型了,同时,返回IList<T>比返回IList更为清晰,但webservcie是不能定义泛型接口的
[WebMethod]
public string GetEntityList(string pEntityName,string pOrder,bool pIsAdc)
{
//构造查询的类。含有一个SelectAll的泛型方法
Locator loc = new Locator();
//取出方法
Type typLoc = loc.GetType();
MethodInfo mi = typLoc.GetMethod("SelectAll");
//泛型参数
string strType = string.Format("{0}.{1},{0}", "NH.Entity", pEntityName);
Type typEntity = Type.GetType(strType);
MethodInfo miConstructed = mi.MakeGenericMethod(typEntity);
//其他参数
object[] args = { pOrder, pIsAdc };
//查询得到IList<T>
object prds = miConstructed.Invoke(loc, args);
//XML序列化IList<T>
return OperatorLib.XmlSeriTool.Serialize(prds);
}
public string GetEntityList(string pEntityName,string pOrder,bool pIsAdc)
{
//构造查询的类。含有一个SelectAll的泛型方法
Locator loc = new Locator();
//取出方法
Type typLoc = loc.GetType();
MethodInfo mi = typLoc.GetMethod("SelectAll");
//泛型参数
string strType = string.Format("{0}.{1},{0}", "NH.Entity", pEntityName);
Type typEntity = Type.GetType(strType);
MethodInfo miConstructed = mi.MakeGenericMethod(typEntity);
//其他参数
object[] args = { pOrder, pIsAdc };
//查询得到IList<T>
object prds = miConstructed.Invoke(loc, args);
//XML序列化IList<T>
return OperatorLib.XmlSeriTool.Serialize(prds);
}
OperatorLib.XmlSeriTool是自定义的一个XML序列化工具类,以下是上面使用到的一个静态方法

浙公网安备 33010602011771号