public object Read(Object target, BlobReader reader) { if (from is ListSerializer || from is DictionarySerializer) { object value = Activator.CreateInstance(field.FieldType); field.SetValue(target, value); from.Read(value, reader); } else { field.SetValue(target, from.Read(target, reader)); } return(null); }
public object Read(Object target, BlobReader reader) { if (from is ListSerializer || from is DictionarySerializer) { object value = Activator.CreateInstance(prop.PropertyType); prop.SetValue(target, value, null); from.Read(value, reader); } else { prop.SetValue(target, from.Read(target, reader), null); } return(null); }
public object Read(Object target, BlobReader reader) { object[] args = new object[2]; using (reader = reader.ReadFieldBlob()) { while (reader.CanTakeBytes(BlobReader.FieldHeaderLength)) { reader.ReadFieldHeader(); switch (Type.GetTypeCode(leftType)) { case TypeCode.Int32: args[0] = BitConverter.ToInt32(reader.ByteKey, 0); break; case TypeCode.String: args[0] = Encoding.ASCII.GetString(reader.ByteKey, 0, reader.FieldKeyBytes); break; default: throw new NotImplementedException(); } args[1] = from.Read(target, reader); add.Invoke(target, args); } reader.SkipSpare(); } return(null); }
public object Read(Object target, BlobReader reader) { object[] args = new object[1]; using (reader = reader.ReadFieldBlob()) { while (reader.CanTakeBytes(BlobReader.FieldHeaderLength)) { reader.ReadFieldHeader(); // if there are no data bytes, we can "probably" assume that the keys are the values if (reader.FieldDataBytes > 0) { args[0] = from.Read(target, reader); } else { // only handles ints, refactor this probably args[0] = BitConverter.ToInt32(reader.ByteKey, 0); } add.Invoke(target, args); } reader.SkipSpare(); } return(null); }