Пример #1
0
        public override object GetObject(byte[] inputBytes, int startOffset, out int nextStartOffset)
        {
            var objectByteData = ByteUtil.DecodeBytes(inputBytes, startOffset, out nextStartOffset);

            if (objectByteData.Length > 0)
            {
                var count          = ByteUtil.DecodeInt(objectByteData, 0, out int setNextOffset);
                var setOffsetIndex = setNextOffset;
                var set            = new DataSet();
                for (int i = 0; i < count; i++)
                {
                    var table = SerializerFactory.Deserializer(objectByteData, setOffsetIndex, out setNextOffset);
                    if (table != null)
                    {
                        set.Tables.Add((DataTable)table);
                    }
                    setOffsetIndex = setNextOffset;
                }
                return(set);
            }
            else
            {
                return(null);
            }
        }
        private object SetList(string typeName, int count, byte[] inputBytes, int startOffset)
        {
            var listType = RpcSerializerUtil.GetType(typeName);

            if (listType.DeclaringType != null && listType.DeclaringType == typeof(Enumerable))
            {
                var list = new List <int>();
                if (count > 0)
                {
                    for (int i = 0; i < count; i++)
                    {
                        var value = SerializerFactory.Deserializer(inputBytes, startOffset, out int nextStartOffset);
                        startOffset = nextStartOffset;
                        list.Add((int)value);
                    }
                }
                return(list);
            }
            else
            {
                var list = Activator.CreateInstance(listType);
                if (count > 0)
                {
                    for (int i = 0; i < count; i++)
                    {
                        var value = SerializerFactory.Deserializer(inputBytes, startOffset, out int nextStartOffset);
                        startOffset = nextStartOffset;
                        listType.InvokeMember("Add", BindingFlags.InvokeMethod, null, list, new object[] { value });
                    }
                }
                return(list);
            }
        }
        public override object GetObject(byte[] inputBytes, int startOffset, out int nextStartOffset)
        {
            var dicBytesData = ByteUtil.DecodeBytes(inputBytes, startOffset, out nextStartOffset);

            if (dicBytesData.Length > 0)
            {
                var dicTypeName = ByteUtil.DecodeString(dicBytesData, 0, out int arrayDataStartOffset);
                int arrayDataFieldStartOffset = arrayDataStartOffset;
                var count = ByteUtil.DecodeInt(dicBytesData, arrayDataFieldStartOffset, out arrayDataStartOffset);
                var dic   = CreateDic(dicTypeName, count);
                if (count > 0)
                {
                    for (int i = 0; i < count; i++)
                    {
                        arrayDataFieldStartOffset = arrayDataStartOffset;
                        var key = SerializerFactory.Deserializer(dicBytesData, arrayDataFieldStartOffset, out arrayDataStartOffset);
                        arrayDataFieldStartOffset = arrayDataStartOffset;
                        var value = SerializerFactory.Deserializer(dicBytesData, arrayDataFieldStartOffset, out arrayDataStartOffset);
                        dic.Add(key, value);
                    }
                }
                return(dic);
            }
            else
            {
                return(null);
            }
        }
Пример #4
0
 public void Action()
 {
     var test = new Test
     {
         P1  = null,
         P2  = 2,
         P3  = 3,
         P4  = 4,
         P5  = 5,
         P6  = 6,
         P7  = 7,
         P8  = 8,
         P9  = 9,
         P10 = 10,
         P11 = 'a',
         P12 = false,
         P13 = 1.1,
         P14 = 2,
         P15 = DateTime.Now,
         P16 = TimeSpan.FromTicks(1025233),
         P17 = "测试数据",
         P18 = Encoding.UTF8.GetBytes("你好啊"),
         P19 = new Aa
         {
             P1 = 19,
             P2 = Sex.Woman,
             P3 = new int[][] {
                 new int[] { }, new int[] { 1, 2, 4, 5 }
             },
             P4 = new Dictionary <int, string>
             {
                 [1] = "1",
                 [2] = "2"
             },
             P5 = Enumerable.Range(0, 10),
             P6 = Guid.NewGuid(),
             P7 = ObjectId.GenerateNewId()
         }
     };
     var bytes = SerializerFactory.Serializer(test);
     var obj   = SerializerFactory.Deserializer(bytes);
 }
Пример #5
0
 private void SetObjectField(List <FieldInfo> fieldList, object result, byte[] data, int startOffset, int totalLength, out int nextStartOffset)
 {
     if (startOffset < totalLength)
     {
         var fieldName = ByteUtil.DecodeString(data, startOffset, out nextStartOffset);
         startOffset = nextStartOffset;
         var fieldValue = SerializerFactory.Deserializer(data, startOffset, out nextStartOffset);
         var fieldInfo  = fieldList.FirstOrDefault(m => m.Name == fieldName);
         if (fieldInfo != null)
         {
             fieldInfo.SetValue(result, fieldValue);
         }
         startOffset = nextStartOffset;
         SetObjectField(fieldList, result, data, startOffset, totalLength, out nextStartOffset);
     }
     else
     {
         nextStartOffset = startOffset;
     }
 }
Пример #6
0
        public override object GetObject(byte[] inputBytes, int startOffset, out int nextStartOffset)
        {
            var objectByteData = ByteUtil.DecodeBytes(inputBytes, startOffset, out nextStartOffset);

            if (objectByteData.Length > 0)
            {
                var tableName       = ByteUtil.DecodeString(objectByteData, 0, out int tableNextStartOffset);
                var tabeOffsetIndex = tableNextStartOffset;
                var table           = new DataTable(tableName);
                var columnCount     = ByteUtil.DecodeInt(objectByteData, tabeOffsetIndex, out tableNextStartOffset);
                tabeOffsetIndex = tableNextStartOffset;
                for (int i = 0; i < columnCount; i++)
                {
                    var columnName = ByteUtil.DecodeString(objectByteData, tabeOffsetIndex, out tableNextStartOffset);
                    tabeOffsetIndex = tableNextStartOffset;
                    var columnTypeName = ByteUtil.DecodeString(objectByteData, tabeOffsetIndex, out tableNextStartOffset);
                    tabeOffsetIndex = tableNextStartOffset;
                    var type = SerializerUtil.GetType(columnTypeName);
                    table.Columns.Add(columnName, type);
                }
                var rowCount = ByteUtil.DecodeInt(objectByteData, tabeOffsetIndex, out tableNextStartOffset);
                tabeOffsetIndex = tableNextStartOffset;
                for (int i = 0; i < rowCount; i++)
                {
                    DataRow row = table.NewRow();
                    for (int j = 0; j < columnCount; j++)
                    {
                        row[j]          = SerializerFactory.Deserializer(objectByteData, tabeOffsetIndex, out tableNextStartOffset);
                        tabeOffsetIndex = tableNextStartOffset;
                    }
                    table.Rows.Add(row);
                }
                return(table);
            }
            else
            {
                return(null);
            }
        }
Пример #7
0
        public override object GetObject(byte[] inputBytes, int startOffset, out int nextStartOffset)
        {
            var arrayBytesData = ByteUtil.DecodeBytes(inputBytes, startOffset, out nextStartOffset);

            if (arrayBytesData.Length > 0)
            {
                var typeName = ByteUtil.DecodeString(arrayBytesData, 0, out int arrayDataStartOffset);
                int arrayDataFieldStartOffset = arrayDataStartOffset;
                var arrayCount = ByteUtil.DecodeInt(arrayBytesData, arrayDataFieldStartOffset, out arrayDataStartOffset);
                arrayDataFieldStartOffset = arrayDataStartOffset;
                var array = GetArray(typeName, arrayCount);
                for (int i = 0; i < arrayCount; i++)
                {
                    var value = SerializerFactory.Deserializer(arrayBytesData, arrayDataFieldStartOffset, out arrayDataStartOffset);
                    arrayDataFieldStartOffset = arrayDataStartOffset;
                    array.SetValue(value, i);
                }
                return(array);
            }
            else
            {
                return(null);
            }
        }