Classify clasify;
Enum.TryParse(element.GetAttribute("Classify"), out clasify);
switch (clasify)
{
case Classify.Sample:
return GetSampleva lue(element.GetAttribute("Assembly"), element.GetAttribute("Type"), element.InnerText);
case Classify.Array:
return GetArrayValue(element.GetAttribute("ElementAssembly"), element.GetAttribute("ElementType"), element.GetChidlren());
case Classify.List:
return GetListValue(element.GetAttribute("GenericAssembly"), element.GetAttribute("GenericType"), element.GetChidlren());
case Classify.Dictionary:
return GetDictionaryValue(element.GetAttribute("KeyGenericAssembly"),
element.GetAttribute("KeyGenericType"),
element.GetAttribute("ValueGenericAssembly"),
element.GetAttribute("ValueGenericType"),
element.GetChidlren());
case Classify.Dynamic:
return GetDynamicValue(element.GetChidlren());
case Classify.Custom:
return GetCustomValue(element.GetAttribute("Assembly"), element.GetAttribute("Type"), element.GetChidlren());
}
return null;
}
public static object GetSampleva lue(string assembly, string typeFullName, string value)
{
var type = Assembly.Load(assembly).GetType(typeFullName);
if (type == null)
return null;
return CoralConvert.Convert(value, type);
}
public static object GetListValue(string genericAssembly, string genericTypeName, List<XmlElement> elements)
{
var genericType = Assembly.Load(genericAssembly).GetType(genericTypeName);
var type = typeof(List<>).MakeGenericType(genericType);
dynamic list = Activator.CreateInstance(type, true);
foreach (var element in elements)
{
list.Add(GetValue(element));
}
return list;
}
public static object GetArrayValue(string elementAssembly, string elementTypeName, List<XmlElement> elements)
{
var elementType = Assembly.Load(elementAssembly).GetType(elementTypeName);
dynamic list = Array.CreateInstance(elementType, elements.Count);
for (int i = 0; i < elements.Count; i++)
{
list[i] = GetValue(elements[i]);
}
return list;
}
public static object GetDictionaryValue(string keyAssembly, string keyTypeName, string valueAssembly, string valueTypeName, List<XmlElement> elements)
{
var keyType = Assembly.Load(keyAssembly).GetType(keyTypeName);
var valueType = Assembly.Load(valueAssembly).GetType(valueTypeName);
var type = typeof(Dictionary<,>).MakeGenericType(keyType, valueType);
dynamic dict = Activator.CreateInstance(type, true);
foreach (var element in elements)
{
dict.Add(GetValue(element["Key"]), GetValue(element["Value"]));
}
return dict;
}
public static object GetDynamicValue(List<XmlElement> elements)
{
var dict = new DynamicDictionary();
foreach (var element in elements)
{
dict.Dictionary.Add(GetValue(element["Key"]), GetValue(element["Value"]));
}
return dict;
}
public static object GetCustomValue(string assemblyFullName, string typeFullName, List<XmlElement> elements)
{
var type = Assembly.Load(assemblyFullName).GetType(typeFullNa |