//从流里面读取异常消息
        public static TApplicationException Read(TSerializer iprot)
        {
            TField field;

            string        message = null;
            ExceptionType type    = ExceptionType.Unknown;

            //从流里面读取truct的name;这里只是读取并不用
            iprot.ReadStructBegin();
            while (true)
            {
                //读取两次,一次是field.Type = (TType)ReadByte() 另一次是:field.ID = ReadI16()
                field = iprot.ReadFieldBegin();
                if (field.Type == TType.Stop)
                {
                    //一直读取直到field.Type == TType.Stop为止
                    break;
                }

                switch (field.ID)
                {
                case 1:
                    if (field.Type == TType.String)
                    {
                        message = iprot.ReadString();
                    }
                    else
                    {
                        //仅从流中把数据读取出来,不做任何操作
                        TSerializerUtil.Skip(iprot, field.Type);
                    }
                    break;

                case 2:
                    if (field.Type == TType.I32)
                    {
                        type = (ExceptionType)iprot.ReadI32();
                    }
                    else
                    {
                        TSerializerUtil.Skip(iprot, field.Type);
                    }
                    break;

                default:
                    TSerializerUtil.Skip(iprot, field.Type);
                    break;
                }
                //空方法(对二进制流)
                iprot.ReadFieldEnd();
            }
            //空方法
            iprot.ReadStructEnd();

            return(new TApplicationException(type, message));
        }