public override T CreateInstance <T>() { object result = ObjectUtil.CreateObject(BaseClassType, XmlConfig); AssertCreateType <T>(BaseClassType); return(result as T); }
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); }
public override T CreateInstance <T>(params object[] args) { object result = ObjectUtil.CreateObject(RegType, args); AssertCreateType <T>(RegType); return(result as T); }
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); }
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); }
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); }
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); }
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); }
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; } } } }
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); } } }
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); }
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>()); }
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; } } }
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; } } }
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; } }
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); } } }
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); } }
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; } } }