private static object ReflectIn(StageElement element) { object obj; object obj1; object obj2; string str = element.AttributeValueOrDefault <string>("type", null); if (str == null) { throw new SerializationException("Invalid structure detected, missing type info."); } Type type = Type.GetType(str, true); try { obj = Activator.CreateInstance(type, true); } catch (MissingMethodException missingMethodException1) { MissingMethodException missingMethodException = missingMethodException1; throw new SerializationException(string.Format("Unable to create type {0}, ensure it has a parameterless constructor", type.Name), missingMethodException); } IInitializeAfterDeserialization initializeAfterDeserialization = obj as IInitializeAfterDeserialization; if (initializeAfterDeserialization != null) { if (SerializationMaster._requiresInit == null) { throw new InvalidOperationException("An entity requires initialization but was unable to register, call UnstageAndInitialize instead."); } SerializationMaster._requiresInit.Add(initializeAfterDeserialization); } foreach (PropertyInfo serializedProperty in SerializationMaster.GetSerializedProperties(type)) { StageItem stageItem = element.Item(serializedProperty.Name); if (stageItem == null || !SerializationMaster.TryUnstage(stageItem, serializedProperty.PropertyType, out obj1)) { continue; } serializedProperty.SetValue(obj, obj1, null); } foreach (FieldInfo serializedField in SerializationMaster.GetSerializedFields(type)) { StageItem stageItem1 = element.Item(serializedField.Name); if (stageItem1 == null || !SerializationMaster.TryUnstage(stageItem1, serializedField.FieldType, out obj2)) { continue; } serializedField.SetValue(obj, obj2); } return(obj); }
private static object ReflectIn(StageElement element) { var typeName = element.AttributeValueOrDefault <string>("type", null); if (typeName == null) { throw new SerializationException("Invalid structure detected, missing type info."); } var itemType = Type.GetType(typeName, true); object instance; try { instance = Activator.CreateInstance(itemType, true); } catch (MissingMethodException mme) { throw new SerializationException(string.Format("Unable to create type {0}, ensure it has a parameterless constructor", itemType.Name), mme); } var forInit = instance as IInitializeAfterDeserialization; if (forInit != null) { if (_requiresInit == null) { throw new InvalidOperationException("An entity requires initialization but was unable to register, call UnstageAndInitialize instead."); } _requiresInit.Add(forInit); } var properties = GetSerializedProperties(itemType); foreach (var p in properties) { var member = element.Item(p.Name); if (member == null) { continue; } object val; if (TryUnstage(member, p.PropertyType, out val)) { p.SetValue(instance, val, null); } } var fields = GetSerializedFields(itemType); foreach (var f in fields) { var member = element.Item(f.Name); if (member == null) { continue; } object val; if (TryUnstage(member, f.FieldType, out val)) { f.SetValue(instance, val); } } return(instance); }