protected internal TType Set <TType>(TType value, string name) { var targetType = typeof(TType); var data = _data.Value; if (data.TryGetValue(name, out var dataValue) && dataValue.TargetType == targetType) { dataValue.Value = value; } else { data[name] = new DataValue(value, ConverterBase.Find(targetType), targetType); } return(value); }
public DataValue(BinaryReader reader) { TargetType = Type.GetType(reader.ReadString()); Converter = ConverterBase.Find(TargetType); if (reader.ReadBoolean()) { Value = null; return; } // ReSharper disable once SwitchStatementHandlesSomeKnownEnumValuesWithDefault switch ((TypeCode)reader.ReadInt32()) { case TypeCode.Boolean: Value = reader.ReadBoolean(); break; case TypeCode.Byte: Value = reader.ReadByte(); break; case TypeCode.Char: Value = reader.ReadChar(); break; case TypeCode.DateTime: Value = DateTime.FromBinary(reader.ReadInt64()); break; case TypeCode.Decimal: Value = reader.ReadDecimal(); break; case TypeCode.Double: Value = reader.ReadDouble(); break; case TypeCode.Int16: Value = reader.ReadInt16(); break; case TypeCode.Int32: Value = reader.ReadInt32(); break; case TypeCode.Int64: Value = reader.ReadInt64(); break; case TypeCode.SByte: Value = reader.ReadSByte(); break; case TypeCode.Single: Value = reader.ReadSingle(); break; case TypeCode.String: Value = reader.ReadString(); break; case TypeCode.UInt16: Value = reader.ReadUInt16(); break; case TypeCode.UInt32: Value = reader.ReadUInt32(); break; case TypeCode.UInt64: Value = reader.ReadUInt64(); break; case TypeCode.Object: if (TargetType == typeof(AkkaType)) { Value = new AkkaType(reader.ReadString()); } else if (TargetType.IsEnum) { Value = Enum.Parse(TargetType, reader.ReadString()); } else if (typeof(ConfigurationElement).IsAssignableFrom(TargetType)) { var ele = Activator.CreateInstance(Type.GetType(reader.ReadString())); ((IBinarySerializable)ele).Read(reader); Value = ele; } else { var converter = TypeDescriptor.GetConverter(TargetType); if (converter == null) { throw new FormatException("Binary Data not Supportet Format"); } Value = converter.ConvertFromString(reader.ReadString()); } break; default: throw new FormatException("Binary Data not Supportet Format"); } }
public ArrayElement() { _converter = ConverterBase.Find(typeof(TType)); }