示例#1
0
        internal static object InternalGetDefaultValue(Type type, string strValue, object defaultValue,
                                                       ReadSettings settings, bool throwException)
        {
            ITkTypeConverter converter = TkTypeDescriptor.GetConverter(type);

            if (throwException)
            {
                TkDebug.AssertNotNull(converter, string.Format(ObjectUtil.SysCulture,
                                                               "无法获取类型{0}的TypeConverter,请确认是否为其配置TypeConverterAttribute",
                                                               type), null);
            }
            else
            {
                if (converter == null)
                {
                    return(GetTypeDefaultValue(type));
                }
            }
            try
            {
                return(strValue == null?InternalGetDefaultValue(type, defaultValue)
                           : converter.ConvertFromString(strValue, settings));
            }
            catch
            {
                return(InternalGetDefaultValue(type, defaultValue));
            }
        }
示例#2
0
 internal static void AssertTypeConverter(object sender, Type type,
                                          ITkTypeConverter converter, string propertyName)
 {
     TkDebug.AssertNotNull(converter, string.Format(ObjectUtil.SysCulture,
                                                    "在分析属性{1}时出错:无法获取类型{0}的TypeConverter,请确认是否为其配置TkTypeConverterAttribute",
                                                    type, propertyName), sender);
 }
 public SimpleObjectPropertyInfo(object value, Type valueType,
                                 SimpleElementAttribute attribute, ITkTypeConverter converter)
     : base(attribute, null)
 {
     fValue     = value;
     fValueType = value.GetType();
     fLocalName = attribute.LocalName;
     Converter  = converter;
 }
示例#4
0
        public static object GetValue(object sender, Type type, string strValue,
                                      object defaultValue, ReadSettings settings)
        {
            TkDebug.AssertArgumentNull(type, "type", sender);

            ITkTypeConverter converter = TkTypeDescriptor.GetConverter(type);

            AssertTypeConverter(sender, type, converter);
            return(InternalGetValue(type, strValue, defaultValue, settings, converter));
        }
示例#5
0
 private static void WriteDictionary(IDictionary dict, JsonWriter jsonWriter,
                                     ITkTypeConverter converter, WriteSettings settings)
 {
     jsonWriter.WriteStartObject();
     foreach (DictionaryEntry item in dict)
     {
         jsonWriter.WritePropertyName(item.Key.ToString());
         jsonWriter.WriteValue(ObjectUtil.ToString(converter, item.Value, settings));
     }
     jsonWriter.WriteEndObject();
 }
示例#6
0
        public static object GetPropertyObject(object receiver, ReadSettings settings,
                                               ObjectPropertyInfo info, string value, Type objType)
        {
            ITkTypeConverter converter = info.Converter ?? TkTypeDescriptor.GetConverter(objType);

            ObjectUtil.AssertTypeConverter(receiver, objType, converter, info.PropertyName);

            object obj = ObjectUtil.InternalGetValue(objType, value, info.Attribute.DefaultValue,
                                                     settings, converter);

            return(obj);
        }
示例#7
0
        public static string ToString(object obj, WriteSettings settings)
        {
            if (obj == null)
            {
                return(string.Empty);
            }

            ITkTypeConverter converter = TkTypeDescriptor.GetConverter(obj.GetType());

            if (converter != null)
            {
                return(converter.ConvertToString(obj, settings));
            }
            else
            {
                return(obj.ToString());
            }
        }
示例#8
0
        public static ITkTypeConverter GetConverter(Type type)
        {
            ITkTypeConverter result = GetSimpleConverter(type);

            if (result != null)
            {
                return(result);
            }

            if (BaseGlobalVariable.Current != null)
            {
                result = BaseGlobalVariable.Current.GetExTypeConverter(type);
                if (result != null)
                {
                    return(result);
                }
            }

            return(null);
        }
示例#9
0
 private static object GetDefaultValue(Type type, object defaultValue,
                                       ITkTypeConverter converter, ReadSettings settings)
 {
     if (defaultValue != null)
     {
         if (ObjectUtil.IsSubType(type, defaultValue.GetType()))
         {
             return(defaultValue);
         }
         else
         {
             try
             {
                 string value = defaultValue.ToString();
                 return(converter.ConvertFromString(value, settings));
             }
             catch
             {
                 return(null);
             }
         }
     }
     else
     {
         if (type.IsEnum)
         {
             return(GetFirstEnumValue(type));
         }
         else if (type.IsValueType)
         {
             return(ObjectUtil.CreateObject(type));
         }
         else
         {
             return(null);
         }
     }
 }
示例#10
0
        public static ITkTypeConverter GetConverter(PropertyInfo property, Type propertyType)
        {
            TkDebug.AssertArgumentNull(property, "property", null);
            TkDebug.AssertArgumentNull(propertyType, "propertyType", null);

            Attribute attr = Attribute.GetCustomAttribute(property, typeof(TkTypeConverterAttribute));

            if (attr != null)
            {
                return(attr.Convert <TkTypeConverterAttribute>().CreateTypeConverter(propertyType));
            }

            if (BaseGlobalVariable.Current != null)
            {
                ITkTypeConverter result = BaseGlobalVariable.Current.GetExTypeConverter(property);
                if (result != null)
                {
                    return(result);
                }
            }

            return(null);
        }
示例#11
0
        private static BaseDictionaryAttribute GetDictionaryAttribute(object receiver, QName root)
        {
            Type                    valueType = ObjectUtil.GetDictionaryValueType(receiver.GetType(), "", null);
            ITkTypeConverter        converter = TkTypeDescriptor.GetSimpleConverter(valueType);
            BaseDictionaryAttribute attr;

            if (converter == null)
            {
                attr = new ObjectDictionaryAttribute {
                    ObjectType = valueType
                }
            }
            ;
            else
            {
                attr = new DictionaryAttribute {
                    ObjectType = valueType
                }
            };

            attr.Assign(root);
            return(attr);
        }
示例#12
0
        private static SimpleElementAttribute GetElementAttribute(object receiver, Type valueType)
        {
            ITkTypeConverter       converter = TkTypeDescriptor.GetSimpleConverter(valueType);
            SimpleElementAttribute attr;

            if (converter == null)
            {
                attr = new ObjectElementAttribute
                {
                    ObjectType = valueType,
                    IsMultiple = true
                }
            }
            ;
            else
            {
                attr = new SimpleElementAttribute
                {
                    ObjectType = valueType,
                    IsMultiple = true
                }
            };
            return(attr);
        }
示例#13
0
 internal static object InternalGetValue(Type type, string strValue,
                                         object defaultValue, ReadSettings settings, ITkTypeConverter converter)
 {
     try
     {
         return(strValue == null?GetDefaultValue(type, defaultValue, converter, settings)
                    : converter.ConvertFromString(strValue, settings));
     }
     catch
     {
         return(GetDefaultValue(type, defaultValue, converter, settings));
     }
 }
示例#14
0
        public NullableConverter(ITkTypeConverter converter)
        {
            TkDebug.AssertArgumentNull(converter, "converter", null);

            fConverter = converter;
        }
示例#15
0
 public CustomPropertyInfo(Type dataType, NamedAttribute attribute, ITkTypeConverter converter)
     : this(dataType, attribute)
 {
     Converter = converter;
 }
示例#16
0
        public static void WriteObject(IObjectSerializer serializer, object writer,
                                       object receiver, string modelName, WriteSettings settings, QName root,
                                       BaseObjectAttribute attribute, object serializerData, SerializerOptions options)
        {
            Type type = receiver.GetType();

            if (receiver is IDictionary)
            {
                BaseDictionaryAttribute attr = attribute as BaseDictionaryAttribute;
                options.CheckWriteDictionary(serializer, attr);
                if (attr == null)
                {
                    attr = GetDictionaryAttribute(receiver, root);
                }
                serializer.WriteDictionary(writer, receiver.Convert <IDictionary>(), attr,
                                           modelName, settings, root, serializerData);
            }
            else if (type.IsArray || receiver is IList)
            {
                SimpleElementAttribute attr = attribute as SimpleElementAttribute;
                options.CheckWriteList(serializer, attr);
                if (attr == null)
                {
                    Type valueType;
                    if (type.IsArray)
                    {
                        Array arr = receiver as Array;
                        if (arr.Length == 0)
                        {
                            return;
                        }
                        var enumerator = arr.GetEnumerator();
                        enumerator.MoveNext();
                        valueType = enumerator.Current.GetType();
                    }
                    else
                    {
                        valueType = ObjectUtil.GetListValueType(type, "", null);
                    }
                    attr = GetElementAttribute(receiver, valueType);
                }
                serializer.WriteList(writer, receiver.Convert <IEnumerable>(), attr,
                                     modelName, settings, root, serializerData);
            }
            else
            {
                options.CheckWriteObject(serializer);
                ITkTypeConverter converter = TkTypeDescriptor.GetSimpleConverter(type);
                if (converter != null)
                {
                    SimpleElementAttribute simpleAttr = new SimpleElementAttribute
                    {
                        LocalName    = root.LocalName,
                        NamespaceUri = root.Namespace
                    };
                    var info = new SimpleObjectPropertyInfo(receiver, type, simpleAttr, converter);
                    serializer.WriteElement(simpleAttr, writer, receiver, settings, info, serializerData);
                }
                else
                {
                    serializer.WriteObject(writer, receiver, modelName, settings, root, serializerData);
                }
            }
        }