Пример #1
0
        public T ReadValue(IValueReader valueReader)
        {
            if (valueReader is IValueReader <T> tReader)
            {
                return(tReader.ReadValue());
            }

            var value = valueReader.DirectRead();

            if (value is T tValue)
            {
                return(tValue);
            }

            var reader = RWHelper.CreateReader(value);

            if (reader is T tResult)
            {
                return(tResult);
            }

            if (reader != null && reader.As <TKey>() is T tResult2)
            {
                return(tResult2);
            }

            return(XConvert <T> .FromObject(value));
        }
Пример #2
0
        public T ReadValue(IValueReader valueReader)
        {
            if (valueReader is IValueReader <T> tReader)
            {
                return(tReader.ReadValue());
            }

            if (valueReader is IValueReader <System.Reflection.Assembly> assemblyReader)
            {
                return((T)assemblyReader.ReadValue());
            }

            var value = valueReader.DirectRead();

            if (value == null)
            {
                return(null);
            }

            if (value is T tValue)
            {
                return(tValue);
            }

            if (value is string sValue)
            {
                return((T)System.Reflection.Assembly.Load(sValue));
            }

            throw new NotSupportedException(StringHelper.Format("Cannot Read a 'Assembly' by '{0}'.", value.ToString()));
        }
Пример #3
0
        public T ReadValue(IValueReader valueReader)
        {
            if (valueReader is IValueReader <T> tReader)
            {
                return(tReader.ReadValue());
            }

            if (valueReader is IValueReader <Type> typeReader)
            {
                return((T)typeReader.ReadValue());
            }

            var value = valueReader.DirectRead();

            if (value == null)
            {
                return(null);
            }

            if (value is T tValue)
            {
                return(tValue);
            }

            if (value is string sValue)
            {
                return((T)Type.GetType(sValue));
            }

            throw new NotSupportedException(StringHelper.Format("Cannot Read a 'TypeInfo' by '{0}'.", value.ToString()));
        }
        public T ReadValue(IValueReader valueReader)
        {
            if (valueReader is IValueReader <T> )
            {
                return(((IValueReader <T>)valueReader).ReadValue());
            }

            return(XConvert.FromObject <T>(valueReader.DirectRead()));
        }
Пример #5
0
        public T ReadValue(IValueReader valueReader)
        {
            if (valueReader is IValueReader <T> )
            {
                return(((IValueReader <T>)valueReader).ReadValue());
            }

            return(DConvert <T> .Convert(valueReader.DirectRead()));
        }
Пример #6
0
        public T ReadValue(IValueReader valueReader)
        {
            var value = valueReader.DirectRead();

            if (value is T tValue)
            {
                return(tValue);
            }

            throw new NotSupportedException(StringHelper.Format("Cannot read a '{0}', It is a data reader.", typeof(T).Name));
        }
Пример #7
0
        public DBNull ReadValue(IValueReader valueReader)
        {
            var value = valueReader.DirectRead();

            if (value == null || value == DBNull.Value)
            {
                return(DBNull.Value);
            }

            throw new NotSupportedException("Unable convert value to DbNull.");
        }
Пример #8
0
        public void OnWriteValue(string key, IValueReader valueReader)
        {
            DataColumn column;

            if (DataRow != null && (column = DataRow.Table.Columns[key]) != null && column.DataType != typeof(object))
            {
                DataRow[column] = ValueInterface.GetInterface(column.DataType).Read(valueReader);

                return;
            }

            Items.Add(new KeyValuePair <string, object>(key, valueReader.DirectRead()));
        }
Пример #9
0
        public ValueCopyer ReadValue(IValueReader valueReader)
        {
            if (valueReader is IValueReader <ValueCopyer> reader)
            {
                return(reader.ReadValue());
            }

            var valueCopyer = new ValueCopyer();
            var value       = valueReader.DirectRead();

            ValueInterface.WriteValue(valueCopyer, value);

            return(valueCopyer);
        }
Пример #10
0
        public T ReadValue(IValueReader valueReader)
        {
            if (valueReader is IValueReader <T> )
            {
                return(((IValueReader <T>)valueReader).ReadValue());
            }

            var directValue = valueReader.DirectRead();

            if (directValue is T || directValue == null)
            {
                return((T)directValue);
            }

            return(XConvert.FromObject <T>(directValue));
        }
Пример #11
0
        public TimeSpan ReadValue(IValueReader valueReader)
        {
            object directValue = valueReader.DirectRead();

            if (directValue is TimeSpan)
            {
                return((TimeSpan)directValue);
            }

            if (directValue is string)
            {
                return(TimeSpan.Parse((string)directValue));
            }

            return(DConvert <TimeSpan> .Convert(directValue));
        }
Пример #12
0
        public T?ReadValue(IValueReader valueReader)
        {
            if (valueReader.GetBasicType() == BasicTypes.Null)
            {
                var directValue = valueReader.DirectRead();

                if (directValue == null)
                {
                    return(null);
                }

                return(DConvert <T> .Convert(directValue));
            }

            return(ValueInterface <T> .Content.ReadValue(valueReader));
        }
Пример #13
0
        public T ReadValue(IValueReader valueReader)
        {
            if (valueReader is IValueReader <T> tReader)
            {
                return(tReader.ReadValue());
            }

            var value = valueReader.DirectRead();

            if (value is string st)
            {
                return((T)Enum.Parse(EnumType, valueReader.ReadString()));
            }

            return((T)Enum.ToObject(EnumType, value));
        }
Пример #14
0
        public TTask ReadValue(IValueReader valueReader)
        {
            var task = Run();

            if (task is TTask ret)
            {
                return(ret);
            }

            return(XConvert <TTask> .FromObject(task));

            async Task Run()
            {
                valueReader.DirectRead();
            }
        }
Пример #15
0
        public T ReadValue(IValueReader valueReader)
        {
            if (valueReader is IValueReader <T> )
            {
                return(((IValueReader <T>)valueReader).ReadValue());
            }

            object directValue = valueReader.DirectRead();

            if (directValue is T || directValue == null)
            {
                return((T)directValue);
            }

            return(DConvert <T> .Convert(directValue));
        }
Пример #16
0
        public T ReadValue(IValueReader valueReader)
        {
            if (valueReader is IValueReader <T> tReader)
            {
                return(tReader.ReadValue());
            }

            if (valueReader is IValueFiller <TKey> tFiller &&
                typeof(IDataWriter <TKey>).IsAssignableFrom(typeof(T)))
            {
                T instance = default(T);

                try
                {
                    instance = Activator.CreateInstance <T>();;
                }
                catch (Exception)
                {
                    goto Direct;
                }

                tFiller.FillValue((IDataWriter <TKey>)instance);

                return(instance);
            }

Direct:

            var value = valueReader.DirectRead();

            if (value is T tValue)
            {
                return(tValue);
            }

            var reader = RWHelper.CreateReader(value);

            if (reader is T tResult)
            {
                return(tResult);
            }

            throw new NotSupportedException(StringHelper.Format("Cannot read a '{0}', It is a data {1}.", typeof(T).Name, "reader"));
        }
Пример #17
0
        public TimeSpan ReadValue(IValueReader valueReader)
        {
            if (valueReader is IValueReader <TimeSpan> timeSpanReader)
            {
                return(timeSpanReader.ReadValue());
            }

            object directValue = valueReader.DirectRead();

            if (directValue is TimeSpan)
            {
                return((TimeSpan)directValue);
            }

            if (directValue is string)
            {
                return(TimeSpan.Parse((string)directValue));
            }

            return(XConvert.FromObject <TimeSpan>(directValue));
        }
Пример #18
0
        public T ReadValue(IValueReader valueReader)
        {
            if (valueReader is IValueReader <T> tReader)
            {
                return(tReader.ReadValue());
            }

            if (valueReader is IValueReader <Type> typeReader)
            {
                return((T)typeReader.ReadValue());
            }

            var value = valueReader.DirectRead();

            if (value is string typeName && Type.GetType(typeName) is T result)
            {
                return(result);
            }

            return(XConvert <T> .FromObject(value));
        }
Пример #19
0
        public T ReadValue(IValueReader valueReader)
        {
            if (valueReader is IValueReader <T> )
            {
                return(((IValueReader <T>)valueReader).ReadValue());
            }

            var value = valueReader.DirectRead();

            if (value is T ret)
            {
                return(ret);
            }

            if (value is null)
            {
                return((T)(object)null);
            }

            return(XConvert.FromObject <T>(value));
        }
Пример #20
0
        public T ReadValue(IValueReader valueReader)
        {
            if (valueReader is IValueReader <T> tReader)
            {
                return(tReader.ReadValue());
            }

            if (valueReader is IValueReader <Assembly> assemblyReader)
            {
                return((T)assemblyReader.ReadValue());
            }

            var value = valueReader.DirectRead();

            if (value is string sssemblyString && Assembly.Load(sssemblyString) is T result)
            {
                return(result);
            }

            return(XConvert <T> .FromObject(value));
        }
Пример #21
0
        public DateTimeOffset ReadValue(IValueReader valueReader)
        {
            if (valueReader is IValueReader <DateTimeOffset> dateTimeOffsetReader)
            {
                return(dateTimeOffsetReader.ReadValue());
            }

            object directValue = valueReader.DirectRead();

            if (directValue is DateTimeOffset)
            {
                return((DateTimeOffset)directValue);
            }

            if (directValue is string)
            {
                return(DateTimeOffset.Parse((string)directValue));
            }

            return(DConvert <DateTimeOffset> .Convert(directValue));
        }
Пример #22
0
 /// <summary>
 /// 将数据读取器中的值设置到指定名称的成员中。
 /// </summary>
 /// <param name="key">成员的名称</param>
 /// <param name="valueReader">值读取器</param>
 public void OnWriteValue(string key, IValueReader valueReader)
 {
     if (xTypeInfo.rwFields.TryGetValue(key, out var field))
     {
         if (field.CanWrite)
         {
             field.OnWriteValue(obj, valueReader);
         }
         else if (field.CannotSetException)
         {
             throw new MissingMethodException($"Property '{xTypeInfo.type.Name}.{key}' No define '{"set"}' method or cannot access.");
         }
     }
     else if ((xTypeInfo.flags & XBindingFlags.RWNotFoundException) != 0)
     {
         throw new MissingMemberException(xTypeInfo.type.Name, key);
     }
     else
     {
         valueReader.DirectRead();
     }
 }
Пример #23
0
        /// <summary>
        /// 将数据读取器中的值设置到指定名称的成员中。
        /// </summary>
        /// <param name="key">成员的名称</param>
        /// <param name="valueReader">值读取器</param>
        public void OnWriteValue(string key, IValueReader valueReader)
        {
            if (fields.TryGetValue(key, out var field))
            {
                if (field.CanWrite)
                {
                    field.OnWriteValue(this, valueReader);

                    return;
                }
                else if ((flags & XBindingFlags.RWCannotSetException) != 0)
                {
                    throw new MissingMethodException(StringHelper.Format("Property '{0}.{1}' No define '{2}' method or cannot access.", Type.Name, key, "set"));
                }
            }

            else if ((flags & XBindingFlags.RWNoFoundException) != 0)
            {
                throw new MissingMemberException(Type.Name, key);
            }

            valueReader.DirectRead();
        }
Пример #24
0
        public T ReadValue(IValueReader valueReader)
        {
            if (valueReader is IValueReader <T> tReader)
            {
                return(tReader.ReadValue());
            }

            var value = valueReader.DirectRead();

            if (value is T tValue)
            {
                return(tValue);
            }

            var reader = RWHelper.CreateReader(value);

            if (reader is T tResult)
            {
                return(tResult);
            }

            throw new NotSupportedException($"Cannot read a '{typeof(T).Name}', It is a data {"reader"}.");
        }
Пример #25
0
        public void OnWriteValue(string key, IValueReader valueReader)
        {
            var dataColumn = Content.Table.Columns[key];

            if (dataColumn == null)
            {
                var type = typeof(object);

                var value = valueReader.DirectRead();

                if (value != null)
                {
                    type = value.GetType();
                }

                dataColumn = Content.Table.Columns.Add(key, type);

                Content[dataColumn.Ordinal] = value;

                return;
            }

            Content[dataColumn.Ordinal] = ValueInterface.GetInterface(dataColumn.DataType).Read(valueReader);
        }
Пример #26
0
 public void OnWriteValue(TKey key, IValueReader valueReader)
 {
     this[key].DirectWrite(valueReader.DirectRead());
 }
Пример #27
0
 public object ReadValue(IValueReader valueReader)
 {
     return(valueReader.DirectRead());
 }
Пример #28
0
 public void OnWriteValue(int key, IValueReader valueReader)
 {
     ValueInterface.WriteValue(this[key], valueReader.DirectRead());
 }
Пример #29
0
 public JsonValue ReadValue(IValueReader valueReader)
 {
     return(new JsonValue(valueReader.DirectRead()));
 }
Пример #30
0
        public T ReadValue(IValueReader valueReader)
        {
            if (valueReader is IValueReader <T> tReader)
            {
                return(tReader.ReadValue());
            }

            if (IsAssignableToMethodInfo && valueReader is IValueReader <MethodInfo> methodReader)
            {
                return((T)(object)methodReader.ReadValue());
            }
            if (IsAssignableToFieldInfo && valueReader is IValueReader <MethodInfo> fieldReader)
            {
                return((T)(object)fieldReader.ReadValue());
            }
            if (IsAssignableToPropertyInfo && valueReader is IValueReader <PropertyInfo> propertyReader)
            {
                return((T)(object)propertyReader.ReadValue());
            }
            if (IsAssignableToConstructorInfo && valueReader is IValueReader <ConstructorInfo> constructorReader)
            {
                return((T)(object)constructorReader.ReadValue());
            }
            if (IsAssignableToEventInfo && valueReader is IValueReader <EventInfo> eventReader)
            {
                return((T)(object)eventReader.ReadValue());
            }

            var value = valueReader.DirectRead();

            if (value is null)
            {
                return(null);
            }

            if (RWHelper.CreateReader(value, false) is IDataReader <string> infoReader)
            {
                var declaringType = ValueInterface <Type> .ReadValue(infoReader["DeclaringType"]);

                var name = ValueInterface <string> .ReadValue(infoReader["Name"]);

                if (name == ConstructorName || IsAssignableToConstructorInfo)
                {
                    var parameterTypes = ValueInterface <Type[]> .ReadValue(infoReader["ParameterTypes"]);

                    var constructor = declaringType.GetConstructor(parameterTypes);

                    if (constructor != null && constructor is T ret)
                    {
                        return(ret);
                    }
                }
                else if (name == IndexerName)
                {
                    var parameterTypes = ValueInterface <Type[]> .ReadValue(infoReader["ParameterTypes"]);

                    var propertyType = ValueInterface <Type> .ReadValue(infoReader["PropertyType"]);

                    var indexer = declaringType.GetProperty(parameterTypes);

                    if (indexer != null && indexer.PropertyType == propertyType && indexer is T ret)
                    {
                        return(ret);
                    }
                }
                else if (IsAssignableToFieldInfo)
                {
                    var fieldType = ValueInterface <Type> .ReadValue(infoReader["FieldType"]);

                    var field = declaringType.GetField(name);

                    if (field != null && field.FieldType == fieldType && field is T ret)
                    {
                        return(ret);
                    }
                }
                else if (IsAssignableToPropertyInfo)
                {
                    var propertyType = ValueInterface <Type> .ReadValue(infoReader["PropertyType"]);

                    var property = declaringType.GetProperty(name);

                    if (property != null && property.PropertyType == propertyType && property is T ret)
                    {
                        return(ret);
                    }
                }
                else if (IsAssignableToEventInfo)
                {
                    var eventHandlerType = ValueInterface <Type> .ReadValue(infoReader["EventHandlerType"]);

                    var @event = declaringType.GetEvent(name);

                    if (@event != null && @event.EventHandlerType == eventHandlerType && @event is T ret)
                    {
                        return(ret);
                    }
                }
                else if (IsAssignableToMethodInfo)
                {
                    goto Method;
                }
                else
                {
                    var member = declaringType.GetMember(name, Flags);

                    if (member.Length > 0)
                    {
                        switch (member[0].MemberType)
                        {
                        case MemberTypes.Event:
                        {
                            var eventHandlerType = ValueInterface <Type> .ReadValue(infoReader["EventHandlerType"]);

                            if (member[0] is EventInfo @event && @event.EventHandlerType == eventHandlerType && @event is T ret)
                            {
                                return(ret);
                            }
                        }
                        break;

                        case MemberTypes.Field:
                        {
                            var fieldType = ValueInterface <Type> .ReadValue(infoReader["FieldType"]);

                            if (member[0] is FieldInfo field && field.FieldType == fieldType && field is T ret)
                            {
                                return(ret);
                            }
                        }
                        break;

                        case MemberTypes.Property:
                        {
                            var propertyType = ValueInterface <Type> .ReadValue(infoReader["PropertyType"]);

                            if (member[0] is PropertyInfo property && property.PropertyType == propertyType && property is T ret)
                            {
                                return(ret);
                            }
                        }
                        break;

                        case MemberTypes.Method:
                            goto Method;

                        default:
                            throw new NotSupportedException();
                        }
                    }
                }

NoFound:

                throw new MissingMemberException(declaringType.FullName, name);

Method:
                {
                    var parameterTypes = ValueInterface <Type[]> .ReadValue(infoReader["ParameterTypes"]);

                    var returnType = ValueInterface <Type> .ReadValue(infoReader["ReturnType"]);

                    var method = declaringType.GetMethod(name, Flags, Type.DefaultBinder, parameterTypes, null);

                    if (method != null && method.ReturnType == returnType && method is T ret)
                    {
                        return(ret);
                    }

                    goto NoFound;
                }
            }

            if (value is string memberName)
            {
                try
                {
                    if (Type.GetType(memberName) is T ret)
                    {
                        return(ret);
                    }
                }
                catch
                {
                }
            }

            return(XConvert <T> .FromObject(value));
        }