public PayLoad GetObjectAsPayLoad(string PLName, Attribute attr) { PayLoad PL = new PayLoad(PLName); PL.AddValue(mObj.GetType().FullName); List <PropertyInfo> list = GetProperties(attr); foreach (PropertyInfo PI in list) { dynamic v = PI.GetValue(mObj); // Enum might be unknown = not set - so no need to write to xml, like null for object if (PI.PropertyType.IsEnum) { string vs = v.ToString(); // No need to write enum unknown = null if (vs != "Unknown") { PL.AddEnumValue(v); } } else if (v is IObservableList) { List <PayLoad> lst = new List <PayLoad>(); foreach (object o in v) { ObjectReflectionHelper ORHItem = new ObjectReflectionHelper(); ORHItem.obj = o; PayLoad PL1 = ORHItem.GetObjectAsPayLoad("Item", attr); lst.Add(PL1); } PL.AddListPayLoad(lst); } else if (PI.PropertyType.Name == "String") { PL.AddValue((string)v); } else { throw new Exception("Unknown type to handle - " + v); } } PL.ClosePackage(); return(PL); }
internal void UpdateObjectFromPayLoad(PayLoad PL, Attribute attr) { List <PropertyInfo> list = GetProperties(attr); //TODO: unpack the Payload and update the obj foreach (PropertyInfo PI in list) { object v = PI.GetValue(mObj); if (PI.PropertyType.IsEnum) { string s = PL.GetValueEnum(); object o = Enum.Parse(PI.PropertyType, s); PI.SetValue(mObj, o); } else if (v is IObservableList) { List <PayLoad> lst = PL.GetListPayLoad(); foreach (PayLoad PL1 in lst) { ObjectReflectionHelper ORH1 = new ObjectReflectionHelper(); ORH1.CreateObjectFromPayLoad(PL1, attr); ((IObservableList)v).Add(ORH1.obj); } } else if (PI.PropertyType.Name == "String") { string s = PL.GetValueString(); PI.SetValue(mObj, s); } else { throw new Exception("Unknown type to handle - " + PI.PropertyType); } } }