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 enumTypeName = ByteUtil.DecodeString(inputBytes, startOffset, out nextStartOffset); startOffset = nextStartOffset; var enumValue = ByteUtil.DecodeInt(inputBytes, startOffset, out nextStartOffset); var type = RpcSerializerUtil.GetType(enumTypeName); return(Enum.ToObject(type, enumValue)); }
private Array GetArray(string typeName, int length) { try { var type = RpcSerializerUtil.GetType(typeName); return(Array.CreateInstance(type, length)); } catch { return(new object[length]); } }
private IDictionary CreateDic(string typeName, int length) { try { var type = RpcSerializerUtil.GetType(typeName); return((IDictionary)Activator.CreateInstance(type)); } catch { return(new Dictionary <Object, Object>()); } }
public override object GetObject(byte[] inputBytes, int startOffset, out int nextStartOffset) { var objectByteData = ByteUtil.DecodeBytes(inputBytes, startOffset, out nextStartOffset); if (objectByteData.Length > 0) { var typeName = ByteUtil.DecodeString(objectByteData, 0, out int objDataStartOffset); var type = RpcSerializerUtil.GetType(typeName); var result = RpcSerializerUtil.CreateInstance(type); int objDataFieldStartOffset = objDataStartOffset; SetObjectField(type.GetRpcFieldList(), result, objectByteData, objDataFieldStartOffset, objectByteData.Length, out objDataStartOffset); return(result); } else { return(null); } }
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 = RpcSerializerUtil.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); } }