Exemplo n.º 1
0
        public override T CreateInstance <T>()
        {
            object result = ObjectUtil.CreateObject(BaseClassType, XmlConfig);

            AssertCreateType <T>(BaseClassType);
            return(result as T);
        }
Exemplo n.º 2
0
        private void SearchXmlFile(XmlPlugInAttribute attribute, string file)
        {
            TkTrace.LogInfo($"工厂[{Description}]搜索Xml文件{file}");
            ToolkitConfig configXml = ObjectUtil.CreateObject(attribute.XmlConfigType).Convert <ToolkitConfig>();

            configXml.ReadXmlFromFile(file);
            AddXmlConfigXml(configXml, attribute.ConfigInfo);
        }
Exemplo n.º 3
0
        public override T CreateInstance <T>(params object[] args)
        {
            object result = ObjectUtil.CreateObject(RegType, args);

            AssertCreateType <T>(RegType);

            return(result as T);
        }
Exemplo n.º 4
0
        public override T CreateInstance <T>(params object[] args)
        {
            object[] realArgs = new object[args.Length + 1];
            realArgs[0] = XmlConfig;
            Array.Copy(args, 0, realArgs, 1, args.Length);

            object result = ObjectUtil.CreateObject(BaseClassType, realArgs);

            AssertCreateType <T>(BaseClassType);
            return(result as T);
        }
Exemplo n.º 5
0
        internal static object GetPropertyValue(object receiver, Type objectType, ObjectPropertyInfo info)
        {
            object value = info.GetValue(receiver); // ObjectUtil.GetValue(info, receiver);

            if (value == null)
            {
                Type type = objectType ?? info.DataType;
                value = ObjectUtil.CreateObject(type);
                info.SetValue(receiver, value);
            }
            return(value);
        }
Exemplo n.º 6
0
        private object ReadObject(bool usector, ReadSettings settings, JsonTextReader jsonReader,
                                  Type objectType, object receiver, string modelName)
        {
            object subObject = usector ? ObjectUtil.CreateObjectWithCtor(objectType)
                : ObjectUtil.CreateObject(objectType);

            //InternalRead(jsonReader, subObject, modelName, settings);
            //允许递归调用,内嵌的如果不是对象,是数组或者Dictionary,都支持了
            Read(jsonReader, subObject, modelName, settings, null, null);
            SerializerUtil.SetParent(receiver, subObject);
            return(subObject);
        }
Exemplo n.º 7
0
        private static object ReadObject(bool usector, ReadSettings settings, DataRow row,
                                         Type objectType, object receiver, IObjectSerializer datarowSerializer, string modelName)
        {
            object subObject = usector ? ObjectUtil.CreateObjectWithCtor(objectType)
                : ObjectUtil.CreateObject(objectType);
            object rowReader = datarowSerializer.CreateCustomReader(row);

            datarowSerializer.ReadObject(rowReader, subObject, modelName, settings, QName.Toolkit, null);
            SerializerUtil.SetParent(receiver, subObject);

            return(subObject);
        }
Exemplo n.º 8
0
        public void ReadObjectElement(ObjectElementAttribute attribute, object reader,
                                      object receiver, ReadSettings settings, ObjectPropertyInfo info, object serializerData)
        {
            Type   objectType = info.ObjectType;
            object subObject  = attribute.UseConstructor ? ObjectUtil.CreateObjectWithCtor(objectType)
                : ObjectUtil.CreateObject(objectType);

            Read(reader, subObject, info.ModelName, settings, info.QName, null);
            SerializerUtil.SetParent(receiver, subObject);

            SerializerUtil.AddElementValue(attribute, receiver, info, subObject);
        }
Exemplo n.º 9
0
        public void ReadDynamicDictionary(DynamicDictionaryAttribute attribute, object reader,
                                          object receiver, ReadSettings settings, ObjectPropertyInfo info, object serializerData)
        {
            XmlReader xml = reader.Convert <XmlReader>();

            QName       name = info.QName;
            IDictionary dict = attribute.GetDictionary(receiver, info);

            if (xml.IsEmptyElement)
            {
                return;
            }
            var configData = attribute.PlugInFactory.ConfigData;
            //var propertyInfo = info.Convert<ReflectorObjectPropertyInfo>().Property;
            var elementReader = new ConfigFactoryElementReader(attribute, info, info.ModelName);

            while (xml.Read())
            {
                if (xml.NodeType == XmlNodeType.EndElement)
                {
                    QName nodeName = QName.Get(xml);
                    if (nodeName == name)
                    {
                        return;
                    }
                }

                if (xml.NodeType == XmlNodeType.Element)
                {
                    QName nodeName = QName.Get(xml);
                    ObjectPropertyInfo subPropertyInfo;
                    if (elementReader.SupportVersion)
                    {
                        string version = xml.GetAttribute(ToolkitConst.VERSION);
                        subPropertyInfo = elementReader[nodeName, version];
                    }
                    else
                    {
                        subPropertyInfo = elementReader[nodeName];
                    }
                    if (subPropertyInfo != null)
                    {
                        ObjectElementAttribute elementAttr = subPropertyInfo.Attribute.Convert <ObjectElementAttribute>();
                        Type   objectType = elementAttr.ObjectType;
                        object subObject  = elementAttr.UseConstructor ? ObjectUtil.CreateObjectWithCtor(objectType)
                            : ObjectUtil.CreateObject(objectType);
                        Read(reader, subObject, info.ModelName, settings, nodeName, null);
                        SerializerUtil.SetParent(receiver, subObject);
                        dict[nodeName.LocalName] = subObject;
                    }
                }
            }
        }
Exemplo n.º 10
0
 internal static void AddPlugInFactory(PlugInFactoryManager manager, Assembly assembly)
 {
     Attribute[] attrs = Attribute.GetCustomAttributes(assembly,
                                                       typeof(AssemblyPlugInFactoryAttribute));
     if (attrs.Length > 0)
     {
         foreach (AssemblyPlugInFactoryAttribute attribute in attrs)
         {
             BasePlugInFactory factory = ObjectUtil.CreateObject(
                 attribute.PlugInFactoryType).Convert <BasePlugInFactory>();
             TkTrace.LogInfo($"添加工厂:{factory.Description}");
             manager.Add(factory);
         }
     }
 }
Exemplo n.º 11
0
        public ITkTypeConverter GetExTypeConverter(PropertyInfo propertyInfo)
        {
            Attribute attr = Attribute.GetCustomAttribute(propertyInfo, typeof(TypeConverterAttribute));

            if (attr != null)
            {
                string typeName = attr.Convert <TypeConverterAttribute>().ConverterTypeName;
                Type   type     = Type.GetType(typeName);
                if (type != null)
                {
                    TypeConverter converter = ObjectUtil.CreateObject(type).Convert <TypeConverter>();
                    return(new WrapTypeConverter(converter));
                }
            }

            return(null);
        }
Exemplo n.º 12
0
        public ITkTypeConverter CreateTypeConverter(Type type)
        {
            TkDebug.AssertArgumentNull(type, "type", null);

            object result;

            if (UseObjectType)
            {
                result = ObjectUtil.CreateObject(ConverterType, type);
            }
            else
            {
                result = ObjectUtil.CreateObject(ConverterType);
            }

            return(result.Convert <ITkTypeConverter>());
        }
Exemplo n.º 13
0
        public void ReadDynamicDictionary(DynamicDictionaryAttribute attribute, object reader,
                                          object receiver, ReadSettings settings, ObjectPropertyInfo info, object serializerData)
        {
            XElementData currentData = reader.Convert <XElementData>();
            XElement     current     = currentData.Current;
            IDictionary  dict        = attribute.GetDictionary(receiver, info);
            var          configData  = attribute.PlugInFactory.ConfigData;
            //var propertyInfo = info.Convert<ReflectorObjectPropertyInfo>().Property;
            var elementReader = new ConfigFactoryElementReader(attribute, info, info.ModelName);

            foreach (XElement child in current.Elements())
            {
                string             nodeName = child.Name.LocalName;
                QName              qName    = child.Name.ToQName();
                ObjectPropertyInfo subPropertyInfo;
                if (elementReader.SupportVersion)
                {
                    var    verAttr = child.Attribute(ToolkitConst.VERSION);
                    string version = verAttr != null ? verAttr.Value : string.Empty;
                    subPropertyInfo = elementReader[nodeName, version];
                }
                else
                {
                    subPropertyInfo = elementReader[nodeName];
                }
                if (subPropertyInfo != null)
                {
                    ObjectElementAttribute elementAttr = subPropertyInfo.Attribute.Convert <ObjectElementAttribute>();
                    Type   objectType = elementAttr.ObjectType;
                    object subObject  = elementAttr.UseConstructor ? ObjectUtil.CreateObjectWithCtor(objectType)
                        : ObjectUtil.CreateObject(objectType);
                    XElementData next = new XElementData {
                        Current = child, Root = currentData.Root
                    };

                    Read(next, subObject, info.ModelName, settings, QName.Get(nodeName), null);
                    SerializerUtil.SetParent(receiver, subObject);
                    dict[nodeName] = subObject;
                }
            }
        }
Exemplo n.º 14
0
        public void ReadObjectDictionary(ObjectDictionaryAttribute attribute, object reader,
                                         object receiver, ReadSettings settings, ObjectPropertyInfo info, object serializerData)
        {
            XmlReader xml = reader.Convert <XmlReader>();

            QName       name       = info.QName;
            IDictionary dict       = attribute.GetDictionary(receiver, info);
            Type        objectType = info.ObjectType;

            if (xml.IsEmptyElement)
            {
                return;
            }

            while (xml.Read())
            {
                if (xml.NodeType == XmlNodeType.EndElement)
                {
                    QName nodeName = QName.Get(xml);
                    if (nodeName == name)
                    {
                        return;
                    }
                }

                if (xml.NodeType == XmlNodeType.Element)
                {
                    QName  nodeName  = QName.Get(xml);
                    object subObject = attribute.UseConstructor ? ObjectUtil.CreateObjectWithCtor(objectType)
                        : ObjectUtil.CreateObject(objectType);
                    Read(reader, subObject, info.ModelName, settings, nodeName, null);
                    SerializerUtil.SetParent(receiver, subObject);

                    //string nodeValue = ReadString(xml);
                    //object objValue = SerializerUtil.GetPropertyObject(receiver, settings,
                    //    info, nodeValue, objectType);
                    dict[nodeName.LocalName] = subObject;
                }
            }
        }
Exemplo n.º 15
0
        public void ReadObjectDictionary(ObjectDictionaryAttribute attribute, object reader,
                                         object receiver, ReadSettings settings, ObjectPropertyInfo info, object serializerData)
        {
            XElementData currentData = reader.Convert <XElementData>();
            XElement     current     = currentData.Current;
            IDictionary  dict        = attribute.GetDictionary(receiver, info);
            Type         objectType  = info.ObjectType;

            foreach (XElement child in current.Elements())
            {
                string nodeName  = child.Name.LocalName;
                object subObject = attribute.UseConstructor ?
                                   ObjectUtil.CreateObjectWithCtor(objectType) : ObjectUtil.CreateObject(objectType);

                XElementData next = new XElementData {
                    Current = child, Root = currentData.Root
                };
                Read(next, subObject, info.ModelName, settings, QName.Get(nodeName), null);
                SerializerUtil.SetParent(receiver, subObject);
                dict[nodeName] = subObject;
            }
        }
Exemplo n.º 16
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);
         }
     }
 }
Exemplo n.º 17
0
        public void ReadObjectElement(ObjectElementAttribute attribute, object reader, object receiver,
                                      ReadSettings settings, ObjectPropertyInfo info, object serializerData)
        {
            if (attribute.IsMultiple)
            {
                throw new NotSupportedException();
            }

            string xml = GetValue(reader, info.LocalName);

            if (string.IsNullOrEmpty(xml))
            {
                SerializerUtil.AddElementValue(attribute, receiver, info, null);
            }
            else
            {
                Type   objectType = info.ObjectType;
                object subObject  = attribute.UseConstructor ? ObjectUtil.CreateObjectWithCtor(objectType)
                    : ObjectUtil.CreateObject(objectType);
                subObject.ReadXml(xml, settings, QName.ToolkitNoNS);
                SerializerUtil.AddElementValue(attribute, receiver, info, subObject);
                SerializerUtil.SetParent(receiver, subObject);
            }
        }
Exemplo n.º 18
0
        public void ReadObjectDictionary(ObjectDictionaryAttribute attribute, object reader,
                                         object receiver, ReadSettings settings, ObjectPropertyInfo info, object serializerData)
        {
            DataTable table = serializerData.Convert <DataTable>();

            if (table.Rows.Count != 1)
            {
                return;
            }
            DataRow     row  = table.Rows[0];
            IDictionary dict = attribute.GetDictionary(receiver, info);

            foreach (DataColumn column in table.Columns)
            {
                //dict[column.ColumnName] = row[column];
                object rowValue = row[column];
                string xml      = rowValue == DBNull.Value ? null : rowValue.ToString();
                if (string.IsNullOrEmpty(xml))
                {
                    dict[column.ColumnName] = null;
                }
                else
                {
                    Type   objectType = info.ObjectType;
                    object subObject  = attribute.UseConstructor ?
                                        ObjectUtil.CreateObjectWithCtor(objectType) : ObjectUtil.CreateObject(objectType);
                    subObject.ReadXml(info.ModelName, xml, settings, QName.ToolkitNoNS);
                    dict[column.ColumnName] = subObject;
                }
            }
        }