コード例 #1
0
        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);
        }
コード例 #2
0
        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);
                }
            }
        }