none
remoting 事件回调提示 **类未标记为可序列化 RRS feed

  • 问题

  • 是这样的:
    我有个委托:
    public deglate void DataRevEvent(object sender,DataRevEventArgs e);

    //用于接收数据后的回调参数
    [Serializable]
    public class DataRevEventArgs
    {
        public bool CmdIsSuccess{set;get;}
        public object data{set;get;}
    }

    //一个用于串口发送的结构
    public class datatosend
    {
         DataRevEvent afterrev;
    }

    然后在

    public class cls1:marshallbyrefobject
    {

    public int this[int index]
    {
    }

    public void aaa(DataRevEvent[] callback)
    {

      
         var d=new datatosend();

        d.afterrev+=(s,e)=>{ 
                                      if(e.data is byte[])
                                      {
                                           var temp=new dictionary<string,object>();
                                          //一些解析byte[]数组的操作

                                          e.data=temp;

                                         if(callback !=null)
                                         {
                                              callback[0](this,e)
                                         }
                                   }
                                }

          com.send(d);
    }

    }
    在串口接收到数据后,会回调结构体里afterrev指向的函数,如果我直接在服务器里面调用 cls1的aaa函数的话,一切正常,现在我在客户端里 用remoting获取了cls对象,如果是读取 索引器里的所有数据一切都正常,如果一调用到aaa函数,就老是有个类未标记为可序列化 DataRevEventArgs  这个类无论我是加 [Serializable] 或者集成自marshallbyrefobject对象,都提示那个错误??提示的那个类的类名不是我定义的,看起来大概是 cls_><displayclass 

    • 已编辑 启天 2009年12月9日 16:03
    2009年12月9日 13:12

答案

  • 未标记Serializable属性的是不能被序列化的
    一般情况下委托是可以按照BinaryFormatter,SoapFormatter序列化 但是不可以Xml序列化
    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!My blog~~~
    • 已标记为答案 YiChun Chen 2009年12月11日 9:48
    2009年12月10日 15:26
    版主

全部回复

  • 问题我知道出在哪里了,不过不知道怎么解决,问题就出在 public void aaa(DataRevEvent[] callback) 传的这个参数上,如果我传null就不会提示错误,如果传的是匿名函数或lamda表达式的话,就会报错,估计是因为函数无法序列化的问题,这个remoting 里,如果想要服务器端回调客户端的函数的话,有什么方法呢?
    2009年12月9日 16:03
  • 未标记Serializable属性的是不能被序列化的
    一般情况下委托是可以按照BinaryFormatter,SoapFormatter序列化 但是不可以Xml序列化
    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!My blog~~~
    • 已标记为答案 YiChun Chen 2009年12月11日 9:48
    2009年12月10日 15:26
    版主