//从流里面读取异常消息 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)); }