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); } }
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); }
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; } }
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); } }
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); } }