예제 #1
0
        /// <summary>
        /// 对象序列化
        /// </summary>
        /// <param name="serializer"></param>
        protected void toJson(AutoCSer.JsonSerializer serializer)
        {
            serializer.CustomWriteNextName("msgtype");
            serializer.CallSerialize(msgtype.ToString());
            serializer.CustomWriteNextName(msgtype.ToString());
            switch (msgtype)
            {
            case BulkMessageType.mpnews:
                serializer.TypeSerialize(ref mpnews);
                break;

            case BulkMessageType.text:
                serializer.TypeSerialize(ref text);
                break;

            case BulkMessageType.image:
                serializer.TypeSerialize(ref image);
                break;

            case BulkMessageType.voice:
                serializer.TypeSerialize(ref voice);
                break;

            case BulkMessageType.mpvideo:
                serializer.TypeSerialize(ref mpvideo);
                break;

            case BulkMessageType.wxcard:
                serializer.TypeSerialize(ref wxcard);
                break;
            }
            serializer.CustomObjectEnd();
        }
예제 #2
0
 private void toJson(AutoCSer.JsonSerializer serializer)
 {
     serializer.CustomWriteFirstName("name");
     serializer.CallSerialize(name);
     if (type != MenuType.none)
     {
         serializer.CustomWriteNextName("type");
         serializer.TypeSerialize(ref type);
     }
     if (!string.IsNullOrEmpty(key))
     {
         serializer.CustomWriteNextName("key");
         serializer.CallSerialize(key);
     }
     if (!string.IsNullOrEmpty(url))
     {
         serializer.CustomWriteNextName("url");
         serializer.CallSerialize(url);
     }
     if (!string.IsNullOrEmpty(media_id))
     {
         serializer.CustomWriteNextName("media_id");
         serializer.CallSerialize(media_id);
     }
     if (sub_button.length() != 0)
     {
         serializer.CustomWriteNextName("sub_button");
         serializer.TypeSerialize(sub_button);
     }
     serializer.CustomObjectEnd();
 }
예제 #3
0
        internal void ToJson(AutoCSer.JsonSerializer serializer)
        {
            MemberMap memberMap = MemberMap;

            if (memberMap == null || memberMap.IsDefault)
            {
                serializer.TypeSerialize(Value);
            }
            else
            {
                MemberMapValueJsonSerializeConfig config    = MemberMapValueJsonSerializeConfig.Pop() ?? new MemberMapValueJsonSerializeConfig();
                AutoCSer.Json.SerializeConfig     oldConfig = serializer.Config;
                AutoCSer.MemberCopy.Copyer <AutoCSer.Json.SerializeConfig> .Copy(config, oldConfig);

                (serializer.Config = config).MemberMap = memberMap;
                try
                {
                    serializer.TypeSerialize(Value);
                }
                finally
                {
                    serializer.Config = oldConfig;
                    config.MemberMap  = null;
                    MemberMapValueJsonSerializeConfig.PushNotNull(config);
                }
            }
        }
예제 #4
0
 private void serialize(AutoCSer.JsonSerializer serializer)
 {
     serializer.CharStream.Write('[');
     serializer.CallSerialize(ClientNodeId);
     serializer.CharStream.Write(',');
     Node.Serialize(serializer, Checker);
     serializer.CharStream.Write(']');
 }
예제 #5
0
 /// <summary>
 /// 释放资源
 /// </summary>
 public void Dispose()
 {
     if (serializer != null)
     {
         serializer.CharStream.Dispose();
         serializer.Free();
         serializer = null;
     }
 }
예제 #6
0
파일: Node.cs 프로젝트: AutoCSer/AutoCSer
 protected void serializeParent(AutoCSer.JsonSerializer serializer, ServerNodeIdChecker checker)
 {
     if (Parent != null)
     {
         serializer.CharStream.Write(',');
         Parent.Serialize(serializer, checker);
     }
     serializer.CharStream.Write(']');
 }
예제 #7
0
 internal void JsonSerialize <valueType>(ref valueType value)
     where valueType : struct
 {
     if (OutputJsonSerializer == null)
     {
         OutputJsonSerializer = AutoCSer.JsonSerializer.YieldPool.Default.Pop() ?? new AutoCSer.JsonSerializer();
         OutputJsonSerializer.SetTcpServer();
     }
     OutputJsonSerializer.SerializeTcpServer(ref value, OutputSerializer.Stream);
 }
예제 #8
0
 protected override void serializeParameter(AutoCSer.JsonSerializer serializer)
 {
     #region LOOP IntputParameters
     #region IF ParameterType.IsNull
     base.serializeParameter(serializer, @ParameterName);
     #endregion IF ParameterType.IsNull
     #region NOT ParameterType.IsNull
     base.serializeParameterStruct(serializer, ref @ParameterName);
     #endregion NOT ParameterType.IsNull
     #endregion LOOP IntputParameters
 }
예제 #9
0
파일: Node.cs 프로젝트: AutoCSer/AutoCSer
 protected void serializeParameter <parameterType>(AutoCSer.JsonSerializer serializer, parameterType parameter)
 {
     if (parameter == null)
     {
         serializer.CharStream.WriteJsonNull();
     }
     else
     {
         AutoCSer.Json.TypeSerializer <parameterType> .ClassSerialize(serializer, parameter);
     }
 }
예제 #10
0
 protected void freeSerializer()
 {
     if (OutputSerializer != null)
     {
         OutputSerializer.Free();
         OutputSerializer = null;
         if (OutputJsonSerializer != null)
         {
             OutputJsonSerializer.Free();
             OutputJsonSerializer = null;
         }
     }
 }
예제 #11
0
 /// <summary>
 /// DataReader JSON 序列化
 /// </summary>
 /// <param name="isSignle">是否单条记录,否则为数组</param>
 /// <param name="serializeConfig"></param>
 /// <param name="isIgnoreNull">是否忽略 null</param>
 public DataReaderJsonSerialize(bool isSignle, SerializeConfig serializeConfig = null, bool isIgnoreNull = true)
 {
     this.isIgnoreNull = isIgnoreNull;
     serializer        = AutoCSer.JsonSerializer.YieldPool.Default.Pop() ?? new AutoCSer.JsonSerializer();
     serializer.SetTcpServer();
     serializer.Config = serializeConfig ?? AutoCSer.JsonSerializer.DefaultConfig;
     serializer.CharStream.Reset();
     if (!isSignle)
     {
         serializer.CustomArrayStart();
         serializers = EmptyArray <Action <AutoCSer.JsonSerializer, object> > .Array;
     }
 }
예제 #12
0
 private void toJson(AutoCSer.JsonSerializer serializer)
 {
     if (scene_str == null)
     {
         serializer.CustomWriteFirstName("scene_id");
         serializer.CallSerialize(scene_id);
     }
     else
     {
         serializer.CustomWriteFirstName("scene_str");
         serializer.CallSerialize(scene_str);
     }
     serializer.CustomObjectEnd();
 }
예제 #13
0
 internal void ToJson(AutoCSer.JsonSerializer serializer)
 {
     if (MemberMap == null || MemberMap.IsDefault)
     {
         serializer.TypeSerialize(Value);
     }
     else
     {
         AutoCSer.Metadata.MemberMap memberMap = serializer.SetCustomMemberMap(MemberMap);
         try
         {
             serializer.TypeSerialize(Value);
         }
         finally { serializer.SetCustomMemberMap(memberMap); }
     }
 }
예제 #14
0
 private unsafe void toJson(AutoCSer.JsonSerializer serializer)
 {
     if (card_ext.signature == null)
     {
         AutoCSer.LogHelper.Debug("卡券扩展 签名为空", LogLevel.Debug | LogLevel.Info | LogLevel.AutoCSer);
         serializer.CharStream.WriteJsonObject();
     }
     else
     {
         serializer.CustomWriteFirstName("card_id");
         serializer.CallSerialize(card_id);
         serializer.CustomWriteNextName("card_ext");
         serializer.CallSerialize(AutoCSer.JsonSerializer.Serialize(card_ext));
         serializer.CustomObjectEnd();
     }
 }
예제 #15
0
 private static void serialize(AutoCSer.JsonSerializer serializer, ReturnValue value)
 {
     if (value == null)
     {
         serializer.CharStream.WriteJsonArray();
     }
     else
     {
         CharStream jsonStream = serializer.CharStream;
         jsonStream.Write('[');
         serializer.CallSerialize(value.ClientNodeId);
         jsonStream.Write(',');
         value.serialize(serializer);
         jsonStream.Write(']');
     }
 }
예제 #16
0
 private void toJson(AutoCSer.JsonSerializer serializer)
 {
     serializer.CustomWriteFirstName("action_name");
     if (expire_seconds == 0)
     {
         serializer.CallSerialize(action_info.scene.scene_str == null ? "QR_LIMIT_SCENE" : "QR_LIMIT_STR_SCENE");
     }
     else
     {
         serializer.CallSerialize("QR_SCENE");
         serializer.CustomWriteNextName("expire_seconds");
         serializer.CallSerialize(expire_seconds);
     }
     serializer.CustomWriteNextName("action_info");
     serializer.TypeSerialize(ref action_info);
     serializer.CustomObjectEnd();
 }
예제 #17
0
        /// <summary>
        /// 对象序列化
        /// </summary>
        /// <param name="serializer"></param>
        private void toJson(AutoCSer.JsonSerializer serializer)
        {
            serializer.CustomWriteFirstName("touser");
            serializer.CallSerialize(touser);
            serializer.CustomWriteNextName("msgtype");
            serializer.CallSerialize(msgtype.ToString());
            serializer.CustomWriteNextName(msgtype.ToString());
            switch (msgtype)
            {
            case MessageType.news:
                serializer.TypeSerialize(ref news);
                break;

            case MessageType.text:
                serializer.TypeSerialize(ref text);
                break;

            case MessageType.image:
                serializer.TypeSerialize(ref image);
                break;

            case MessageType.voice:
                serializer.TypeSerialize(ref voice);
                break;

            case MessageType.video:
                serializer.TypeSerialize(ref video);
                break;

            case MessageType.music:
                serializer.TypeSerialize(ref music);
                break;

            case MessageType.wxcard:
                serializer.TypeSerialize(ref wxcard);
                break;
            }
            if (customservice.kf_account != null)
            {
                serializer.CustomWriteNextName("customservice");
                serializer.TypeSerialize(ref customservice);
            }
            serializer.CustomObjectEnd();
        }
예제 #18
0
        /// <summary>
        /// 对象序列化
        /// </summary>
        /// <param name="serializer"></param>
        private void toJson(AutoCSer.JsonSerializer serializer)
        {
            if (string.IsNullOrEmpty(towxname))
            {
                serializer.CustomWriteFirstName("touser");
                serializer.CallSerialize(touser);
            }
            else
            {
                serializer.CustomWriteFirstName("towxname");
                serializer.CallSerialize(towxname);
            }
            serializer.CustomWriteNextName("msgtype");
            serializer.CallSerialize(msgtype.ToString());
            serializer.CustomWriteNextName(msgtype.ToString());
            switch (msgtype)
            {
            case BulkMessageType.text:
                serializer.TypeSerialize(ref text);
                break;

            case BulkMessageType.image:
                serializer.TypeSerialize(ref image);
                break;

            case BulkMessageType.voice:
                serializer.TypeSerialize(ref voice);
                break;

            case BulkMessageType.mpvideo:
                serializer.TypeSerialize(ref mpvideo);
                break;

            case BulkMessageType.mpnews:
                serializer.TypeSerialize(ref mpnews);
                break;

            case BulkMessageType.wxcard:
                serializer.TypeSerialize(ref wxcard);
                break;
            }
            serializer.CustomObjectEnd();
        }
예제 #19
0
 internal void FreeSerializer()
 {
     OutputStream = null;
     if (ReceiveDeSerializer != null)
     {
         ReceiveDeSerializer.Free();
         ReceiveDeSerializer = null;
     }
     if (ReceiveJsonParser != null)
     {
         ReceiveJsonParser.Free();
         ReceiveJsonParser = null;
     }
     if (OutputSerializer != null)
     {
         OutputSerializer.Free();
         OutputSerializer = null;
     }
     if (OutputJsonSerializer != null)
     {
         OutputJsonSerializer.Free();
         OutputJsonSerializer = null;
     }
 }
예제 #20
0
 /// <summary>
 /// 序列化数据值
 /// </summary>
 /// <param name="serializer"></param>
 /// <param name="value"></param>
 private static void serializeByteArray(AutoCSer.JsonSerializer serializer, object value)
 {
     serializer.CallSerialize((byte[])value);
 }
예제 #21
0
 /// <summary>
 /// 序列化数据值
 /// </summary>
 /// <param name="serializer"></param>
 /// <param name="value"></param>
 private static void serializeBool(AutoCSer.JsonSerializer serializer, object value)
 {
     serializer.CallSerialize((bool)value);
 }
예제 #22
0
 private static void toJson(AutoCSer.JsonSerializer serializer, Message value)
 {
     value.toJson(serializer);
 }
예제 #23
0
 private void toJson(AutoCSer.JsonSerializer toJsoner)
 {
     new AutoCSer.Metadata.MemberMapValue <memberMapType> {
         MemberMap = MemberMap, Value = Value
     }.ToJson(toJsoner);
 }
예제 #24
0
 /// <summary>
 /// 序列化数据值
 /// </summary>
 /// <param name="serializer"></param>
 /// <param name="value"></param>
 private static void serializeULong(AutoCSer.JsonSerializer serializer, object value)
 {
     serializer.CallSerialize((ulong)value);
 }
예제 #25
0
 private static void toJson(AutoCSer.JsonSerializer serializer, OpenIdMessage value)
 {
     serializer.CustomWriteFirstName("touser");
     serializer.TypeSerialize(value.touser);
     value.toJson(serializer);
 }
예제 #26
0
 /// <summary>
 /// 序列化数据值
 /// </summary>
 /// <param name="serializer"></param>
 /// <param name="value"></param>
 private static void serializeSByte(AutoCSer.JsonSerializer serializer, object value)
 {
     serializer.CallSerialize((sbyte)value);
 }
예제 #27
0
 internal static void Serialize(AutoCSer.JsonSerializer serializer, CustomClass value)
 {
     serializer.CharStream.Write(value.Value == null ? '1' : '2');
 }
예제 #28
0
 /// <summary>
 /// 序列化数据值
 /// </summary>
 /// <param name="serializer"></param>
 /// <param name="value"></param>
 private static void serializeShort(AutoCSer.JsonSerializer serializer, object value)
 {
     serializer.CallSerialize((short)value);
 }
예제 #29
0
        /// <summary>
        /// 创建命令输入数据
        /// </summary>
        /// <typeparam name="inputParameterType"></typeparam>
        /// <param name="commandInfo"></param>
        /// <param name="inputParameter"></param>
        /// <param name="clientBuffer"></param>
        private unsafe void build <inputParameterType>(TcpServer.CommandInfoBase commandInfo, ref inputParameterType inputParameter, ref ClientBuffer clientBuffer)
            where inputParameterType : struct
        {
            byte *start = outputStream.Data.Byte;

            outputStream.Data.CurrentIndex = sizeof(uint) + sizeof(int);
            if ((commandInfo.CommandFlags & TcpServer.CommandFlags.JsonSerialize) == 0)
            {
                if (commandInfo.SimpleSerializeInputParamter == 0)
                {
                    int parameterIndex = commandInfo.InputParameterIndex;
                    if (serializeParameterIndex == parameterIndex)
                    {
                        outputSerializer.SerializeTcpServerNext(ref inputParameter);
                    }
                    else
                    {
                        outputSerializer.SerializeTcpServer(ref inputParameter);
                        serializeParameterIndex = parameterIndex;
                    }
                }
                else
                {
                    SimpleSerialize.TypeSerializer <inputParameterType> .Serializer(outputStream, ref inputParameter);
                }
            }
            else
            {
                if (outputJsonSerializer == null)
                {
                    outputJsonSerializer = AutoCSer.JsonSerializer.YieldPool.Default.Pop() ?? new AutoCSer.JsonSerializer();
                    outputJsonSerializer.SetTcpServer();
                }
                outputJsonSerializer.SerializeTcpServer(ref inputParameter, outputSerializer.Stream);
            }
            int dataLength = outputStream.Data.CurrentIndex - (sizeof(uint) + sizeof(int));

            if (dataLength <= maxInputSize)
            {
                byte *write = outputStream.Data.Byte;
                *(uint *)write = (uint)commandInfo.Command | (uint)commandInfo.CommandFlags;
                *(int *)(write + sizeof(uint)) = dataLength;

                if (outputStream.Data.CurrentIndex <= Buffer.Length)
                {
                    if (start != write)
                    {
                        AutoCSer.Memory.Common.CopyNotNull(write, start, outputStream.Data.CurrentIndex);
                    }
                    clientBuffer.Data.Set(Buffer.Buffer, Buffer.StartIndex, outputStream.Data.CurrentIndex);
                }
                else
                {
                    outputStream.Data.GetSubBuffer(ref clientBuffer.CopyBuffer);
                    clientBuffer.SetSendDataCopyBuffer(outputStream.Data.CurrentIndex);
                    if (clientBuffer.CopyBuffer.Length <= SendBufferMaxSize)
                    {
                        Buffer.Free();
                        clientBuffer.CopyBuffer.CopyToClear(ref Buffer);
                    }
                }
                if (dataLength < MinCompressSize || !clientBuffer.CompressSendData(dataLength, SendMarkData))
                {
                    if (SendMarkData == 0)
                    {
                        clientBuffer.IsError = true;
                    }
                    else
                    {
                        clientBuffer.MarkSendData(dataLength, SendMarkData);
                    }
                }
            }
        }
예제 #30
0
 /// <summary>
 /// 序列化数据值
 /// </summary>
 /// <param name="serializer"></param>
 /// <param name="value"></param>
 private static void serializeUInt(AutoCSer.JsonSerializer serializer, object value)
 {
     serializer.CallSerialize((uint)value);
 }