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");
                }
            }
Beispiel #3
0
 public ArrayElement()
 {
     _converter = ConverterBase.Find(typeof(TType));
 }