public ProtoData(byte[] buf)
    {
        MemoryStream ms       = new MemoryStream(buf);
        BinaryReader br       = new BinaryReader(ms);
        string       typename = br.ReadString() + ",mw-proto-client";
        uint         size     = br.ReadUInt32();

        m_dataItems = new T[size];

        System.Type type = System.Type.GetType(typename);
        if (type != typeof(T))
        {
            //Debug.LogError("Type does dot matched.");
            return;
        }


        var s = new mw_serializer0();

        for (int i = 0; i < size; i++)
        {
            int    len     = br.ReadInt32();
            byte[] itemBuf = br.ReadBytes(len);

            //m_dataItems[i] = ProtoBuf.Serializer.NonGeneric.Deserialize(type, new MemoryStream(itemBuf)) as T;
            m_dataItems[i] = s.Deserialize(new MemoryStream(itemBuf), null, type) as T;
        }
    }
        //写文件
        public static void Save <T>(string path, List <T> t) where T : class, global::ProtoBuf.IExtensible
        {
            MemoryStream ms   = new MemoryStream();
            BinaryWriter br   = new BinaryWriter(ms);
            string       name = typeof(T).FullName;

            br.Write(name);
            uint count = (uint)t.Count;

            br.Write(count);

            mw_serializer0 serializer = new mw_serializer0();

            for (int i = 0; i < (uint)t.Count; i++)
            {
                MemoryStream stream = new MemoryStream();
                //ProtoSerializer.Instance.Serialize(stream, t[i]);
                serializer.Serialize(stream, t[i]);
                byte[] Byte = stream.GetBuffer();
                br.Write((int)stream.Length);
                br.Write(Byte, 0, (int)stream.Length);
            }

            byte[] buffer           = ms.GetBuffer();
            string configBinaryFile = HttpRuntime.AppDomainAppPath + path;

            using (FileStream fileStream = File.Create(configBinaryFile))
            {
                fileStream.Write(buffer, 0, (int)br.BaseStream.Length);
            }

            return;
        }
        /// <summary>
        /// 序列化
        /// </summary>
        /// <typeparam name="T">配置类型</typeparam>
        /// <param name="list">配置列表</param>
        /// <returns>数据缓冲区</returns>
        public static byte[] Serialize <T>(List <T> list) where T : class, global::ProtoBuf.IExtensible
        {
            using (var writer = new BinaryWriter(new MemoryStream()))
            {
                writer.Write(typeof(T).FullName);
                writer.Write((uint)list.Count);

                mw_serializer0 serializer = new mw_serializer0();

                for (int i = 0; i < list.Count; ++i)
                {
                    MemoryStream stream = new MemoryStream();
                    serializer.Serialize(stream, list[i]);
                    writer.Write((int)stream.Length);
                    writer.Write(stream.GetBuffer(), 0, (int)stream.Length);
                }

                byte[] buffer = new byte[writer.BaseStream.Length];
                Array.Copy((writer.BaseStream as MemoryStream).GetBuffer(), 0, buffer, 0, buffer.Length);

                return(buffer);
            }
        }
        /// <summary>
        /// 发送
        /// </summary>
        /// <typeparam name="T">配置类型</typeparam>
        /// <param name="list">配置列表</param>
        /// <param name="sendType">发送类型</param>
        /// <param name="initializedServer">初始化服务器</param>
        /// <returns>发送信息</returns>
        public static string Send <T>(List <T> list, int sendType = -1, gmt.Server initializedServer = null) where T : class, global::ProtoBuf.IExtensible
        {
            Type type = typeof(T);

            string[] name;
            if (!TableManager.tableNameDictionary.TryGetValue(type, out name))
            {
                Log.AddLog(string.Format("错误表格的类型:", type.FullName));
                return(TableManager.GetGMTText(901));
            }

            string output = "";

            if (sendType < 0)
            {
                if (!string.IsNullOrEmpty(name[2]))
                {
                    sendType = int.Parse(name[2]);
                }
            }

            if (sendType >= 0)
            {
                byte[] versions             = { (byte)DateTime.Now.Month, (byte)DateTime.Now.Day, (byte)DateTime.Now.Hour, (byte)DateTime.Now.Minute };
                mw.AUTH_GMT_SETTINT_Ntf Ntf = new mw.AUTH_GMT_SETTINT_Ntf();
                Ntf.type   = (mw.EGMTSettintType)sendType;
                Ntf.verson = BitConverter.ToInt32(versions, 0);

                mw_serializer0 serializer = new mw_serializer0();

                for (int i = 0; i < list.Count; ++i)
                {
                    using (MemoryStream stream = new MemoryStream())
                    {
                        serializer.Serialize(stream, list[i]);
                        byte[] buffer = new byte[stream.Length];
                        stream.Position = 0;
                        stream.Read(buffer, 0, buffer.Length);

                        mw.AUTH_GMT_SETTINT_NODE node = new mw.AUTH_GMT_SETTINT_NODE();
                        node.len  = buffer.Length;
                        node.data = buffer;

                        Ntf.info.Add(node);
                    }
                }

                MemoryStream memoryStream = new MemoryStream();
                ProtoSerializer.Instance.Serialize(memoryStream, Ntf);
                byte[] sendBuffer = new byte[memoryStream.Length];
                memoryStream.Position = 0;
                memoryStream.Read(sendBuffer, 0, sendBuffer.Length);

                if (initializedServer != null)
                {
                    output = TableManager.Send2Server(output, initializedServer, sendBuffer);
                }
                else
                {
                    for (int i = 0; i < gmt.Server.Count; ++i)
                    {
                        output = TableManager.Send2Server(output, gmt.Server.GetServerAt(i), sendBuffer);
                    }
                }
            }

            return(output);
        }