Exemple #1
0
        /// <summary>
        /// 序列化对象
        /// </summary>
        /// <param name="encoder">对象编码器.</param>
        public override void serialization(LuaObjectEncoder encoder)
        {
            base.serialization(encoder);

            if (_context != null)
            {
                encoder.writeInt32(_context.objectId);
            }
            else
            {
                encoder.writeInt32(0);
            }

            encoder.writeString(_tableId);
            encoder.writeInt16((Int16)type);

            switch (type)
            {
            case LuaValueType.Number:
            {
                encoder.writeDouble(toNumber());
                break;
            }

            case LuaValueType.Integer:
            {
                encoder.writeInt32(toInteger());
                break;
            }

            case LuaValueType.String:
            {
                encoder.writeString(toString());
                break;
            }

            case LuaValueType.Data:
            {
                encoder.writeBytes(toData());
                break;
            }

            case LuaValueType.Array:
            {
                List <LuaValue> list = toArray();

                encoder.writeInt32(list.Count);
                foreach (LuaValue value in list)
                {
                    encoder.writeObject(value);
                }
                break;
            }

            case LuaValueType.Map:
            {
                Dictionary <string, LuaValue> map = toMap();
                encoder.writeInt32(map.Count);

                foreach (KeyValuePair <string, LuaValue> kv in map)
                {
                    encoder.writeString(kv.Key);
                    encoder.writeObject(kv.Value);
                }
                break;
            }

            case LuaValueType.Object:
            {
                encoder.writeObject(_value);
                break;
            }

            case LuaValueType.Boolean:
            {
                encoder.writeByte(Convert.ToByte(toBoolean()));
                break;
            }

            case LuaValueType.Function:
            {
                encoder.writeObject(toFunction());
                break;
            }

            case LuaValueType.Ptr:
            {
                encoder.writeObject(toPointer());
                break;
            }

            case LuaValueType.Tuple:
            {
                encoder.writeObject(toTuple());
                break;
            }

            default:
                break;
            }
        }