internal ClassDefinition ReadClassDefinition(int handle) { ClassDefinition classDefinition = null; //an inline object bool inlineClassDef = ((handle & 1) != 0); handle = handle >> 1; if (inlineClassDef) { //inline class-def string typeIdentifier = ReadAMF3String(); //flags that identify the way the object is serialized/deserialized bool externalizable = ((handle & 1) != 0); handle = handle >> 1; bool dynamic = ((handle & 1) != 0); handle = handle >> 1; ClassMember[] members = new ClassMember[handle]; for (int i = 0; i < handle; i++) { string name = ReadAMF3String(); ClassMember classMember = new ClassMember(name, BindingFlags.Default, MemberTypes.Custom, null); members[i] = classMember; } classDefinition = new ClassDefinition(typeIdentifier, members, externalizable, dynamic); AddClassReference(classDefinition); } else { //A reference to a previously passed class-def classDefinition = ReadClassReference(handle); } return(classDefinition); }
public ClassDefinition GetClassDefinition(object instance) { if (instance is ASObject) { ClassDefinition classDefinition; ASObject aso = instance as ASObject; if (aso.IsTypedObject) { ClassMember[] classMemberList = new ClassMember[aso.Count]; int i = 0; foreach (KeyValuePair <string, object> entry in aso) { ClassMember classMember = new ClassMember(entry.Key, BindingFlags.Default, MemberTypes.Custom, null); classMemberList[i] = classMember; i++; } string customClassName = aso.TypeName; classDefinition = new ClassDefinition(customClassName, classMemberList, false, false); } else { string customClassName = string.Empty; classDefinition = new ClassDefinition(customClassName, ClassDefinition.EmptyClassMembers, false, true); } return(classDefinition); } throw new ArgumentException(); }
public override ClassDefinition GetClassDefinition(object instance) { Type type = instance.GetType(); BindingFlags bindingAttr = BindingFlags.Public | BindingFlags.Instance; PropertyInfo[] propertyInfos = type.GetProperties(bindingAttr); List <ClassMember> classMemberList = new List <ClassMember>(); for (int i = 0; i < propertyInfos.Length; i++) { PropertyInfo propertyInfo = propertyInfos[i]; if (propertyInfo.Name != "HelpLink" && propertyInfo.Name != "TargetSite") { ClassMember classMember = new ClassMember(propertyInfo.Name, bindingAttr, propertyInfo.MemberType, null); classMemberList.Add(classMember); } } string customClassName = ObjectFactory.GetCustomClass(type); ClassMember[] classMembers = classMemberList.ToArray(); ClassDefinition classDefinition = new ClassDefinition(customClassName, classMembers, GetIsExternalizable(instance), GetIsDynamic(instance)); return(classDefinition); }
public void SetValue(object instance, ClassMember member, object value) { if (instance is ASObject) { ASObject aso = instance as ASObject; aso[member.Name] = value; } throw new ArgumentException(); }
public object GetValue(object instance, ClassMember member) { if (instance is ASObject) { ASObject aso = instance as ASObject; if (aso.ContainsKey(member.Name)) { return(aso[member.Name]); } string msg = string.Format("ASObject[{0}]", member.Name); throw new MissingMemberException(msg); } throw new ArgumentException(); }
public virtual void SetValue(object instance, ClassMember member, object value) { Type type = instance.GetType(); if (member.MemberType == MemberTypes.Property) { PropertyInfo propertyInfo = type.GetProperty(member.Name, member.BindingFlags); propertyInfo.SetValue(instance, value, null); } if (member.MemberType == MemberTypes.Field) { FieldInfo fieldInfo = type.GetField(member.Name, member.BindingFlags); fieldInfo.SetValue(instance, value); } string msg = string.Format("{0}.{1}", type.FullName, member.Name); throw new MissingMemberException(msg); }
public virtual object GetValue(object instance, ClassMember member) { Type type = instance.GetType(); if (member.MemberType == MemberTypes.Property) { PropertyInfo propertyInfo = type.GetProperty(member.Name, member.BindingFlags); object value = propertyInfo.GetValue(instance, null); value = HandleAttributes(instance, propertyInfo, value, member.CustomAttributes); return(value); } if (member.MemberType == MemberTypes.Field) { FieldInfo fieldInfo = type.GetField(member.Name, member.BindingFlags); object value = fieldInfo.GetValue(instance); value = HandleAttributes(instance, fieldInfo, value, member.CustomAttributes); return(value); } string msg = string.Format("{0}.{1}", type.FullName, member.Name); throw new MissingMemberException(msg); }
public void SetValue(object instance, ClassMember member, object value) { throw new NotSupportedException(); }
public object GetValue(object instance, ClassMember member) { throw new NotSupportedException(); }
public virtual ClassDefinition GetClassDefinition(object instance) { Type type = instance.GetType(); StringBuilder sb = new StringBuilder(); sb.AppendFormat("Creating class definition for typed {0}", type.FullName); sb.Append("{"); List <string> memberNames = new List <string>(); List <ClassMember> classMemberList = new List <ClassMember>(); PropertyInfo[] propertyInfos = type.GetProperties(BindingFlags.Public | BindingFlags.Instance); for (int i = 0; i < propertyInfos.Length; i++) { PropertyInfo propertyInfo = propertyInfos[i]; string name = propertyInfo.Name; if (propertyInfo.GetGetMethod() == null || propertyInfo.GetSetMethod() == null || propertyInfo.GetGetMethod().GetParameters().Length > 0) { //The gateway will not be able to access this property continue; } if (memberNames.Contains(name)) { continue; } memberNames.Add(name); BindingFlags bf = BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance; try { PropertyInfo propertyInfoTmp = type.GetProperty(name); Unreferenced.Parameter(propertyInfoTmp); } catch (AmbiguousMatchException) { bf = BindingFlags.DeclaredOnly | BindingFlags.Static | BindingFlags.Public | BindingFlags.Instance; } object[] attributes = propertyInfo.GetCustomAttributes(false); ClassMember classMember = new ClassMember(name, bf, propertyInfo.MemberType, attributes); classMemberList.Add(classMember); if (i != 0) { sb.Append(", "); } sb.Append(name); } FieldInfo[] fieldInfos = type.GetFields(BindingFlags.Public | BindingFlags.Instance); for (int i = 0; i < fieldInfos.Length; i++) { FieldInfo fieldInfo = fieldInfos[i]; if (fieldInfo.GetCustomAttributes(typeof(NonSerializedAttribute), true).Length > 0) { continue; } string name = fieldInfo.Name; object[] attributes = fieldInfo.GetCustomAttributes(false); ClassMember classMember = new ClassMember(name, BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance, fieldInfo.MemberType, attributes); classMemberList.Add(classMember); if (i != 0 && propertyInfos.Length > 0) { sb.Append(", "); } sb.Append(name); } ClassMember[] classMembers = classMemberList.ToArray(); string customClassName = ObjectFactory.GetCustomClass(type); ClassDefinition classDefinition = new ClassDefinition(customClassName, classMembers, GetIsExternalizable(instance), GetIsDynamic(instance)); return(classDefinition); }
private object ReadAMF3Object(AMFReader reader, IConfigVODB configVodb) { int handle = reader.ReadAMF3IntegerData(); bool inline = ((handle & 1) != 0); handle = handle >> 1; if (!inline) { //An object reference return(reader.ReadAMF3ObjectReference(handle)); } bool inlineClassDef = ((handle & 1) != 0); handle = handle >> 1; if (inlineClassDef) { //inline class-def string typeIdentifier = reader.ReadAMF3String(); //flags that identify the way the object is serialized/deserialized bool externalizable = ((handle & 1) != 0); handle = handle >> 1; bool dynamic = ((handle & 1) != 0); handle = handle >> 1; ClassMember[] members = null; if (handle > 0) { members = new ClassMember[handle]; for (int i = 0; i < handle; i++) { string name = reader.ReadAMF3String(); ClassMember classMember = new ClassMember(name, BindingFlags.Default, MemberTypes.Custom, null); members[i] = classMember; } } classDefinition = new ClassDefinition(typeIdentifier, members, externalizable, dynamic); reader.AddClassReference(classDefinition); } else { classDefinition = reader.ReadClassReference(handle); } object instance = configVodb.dbInstanceCreater(); reader.AddAMF3ObjectReference(instance); for (int i = 0; i < classDefinition.MemberCount; i++) { string key = classDefinition.Members[i].Name; object value = reader.ReadAMF3Data(); reader.SetMember(instance, key, value); } if (classDefinition.IsDynamic) { string key = reader.ReadAMF3String(); object value; while (key != null && key != string.Empty) { value = reader.ReadAMF3Data(); if (fieldInfosDic.TryGetValue(key, out fieldInfo)) { configVodb.instanceFieldBind(instance, fieldInfo, value); } else if (fieldInfosDic.TryGetValue("__" + key, out fieldInfo)) { configVodb.instanceFieldBind(instance, fieldInfo, value); } else { configVodb.instanceFieldBind(instance, key, value); } key = reader.ReadAMF3String(); } } return(instance); }