Exemplo n.º 1
0
        /// <summary>
        /// Deserialize an object from DTO graph.
        /// </summary>
        ///<param name="deserialized">DTO grap to deserialize</param>
        /// <returns></returns>
        public object DeserializeAsDTO(List <SerializationInfo> deserialized)
        {
            _deserializationReferences = new Dictionary <int, IMobileObject>();
            foreach (SerializationInfo info in deserialized)
            {
                //Type type = Csla.Reflection.MethodCaller.GetType(info.TypeName);
                Type type = GetTypeFromCache(info.TypeName);

                if (type == null)
                {
                    throw new SerializationException(string.Format(
                                                         Resources.MobileFormatterUnableToDeserialize,
                                                         info.TypeName));
                }
                else if (type == typeof(NullPlaceholder))
                {
                    _deserializationReferences.Add(info.ReferenceId, null);
                }
                else
                {
#if (ANDROID || IOS) || NETFX_CORE
                    IMobileObject mobile = (IMobileObject)Activator.CreateInstance(type);
#else
                    IMobileObject mobile = (IMobileObject)Activator.CreateInstance(type, true);
#endif

                    _deserializationReferences.Add(info.ReferenceId, mobile);

                    ConvertEnumsFromIntegers(info);
                    mobile.SetState(info);
                }
            }

            foreach (SerializationInfo info in deserialized)
            {
                IMobileObject mobile = _deserializationReferences[info.ReferenceId];

                if (mobile != null)
                {
                    mobile.SetChildren(info, this);
                }
            }

            foreach (SerializationInfo info in deserialized)
            {
                ISerializationNotification notifiable = _deserializationReferences[info.ReferenceId] as ISerializationNotification;
                if (notifiable != null)
                {
                    notifiable.Deserialized();
                }
            }

            return(_deserializationReferences.Count > 0 ? _deserializationReferences[1] : null);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Deserialize an object from XML.
        /// </summary>
        /// <param name="reader">
        /// XmlReader containing the serialized XML
        /// data.
        /// </param>
        /// <returns></returns>
        public object Deserialize(XmlReader reader)
        {
            DataContractSerializer dc = new DataContractSerializer(
                typeof(List <SerializationInfo>),
                new Type[] { typeof(List <int>), typeof(byte[]) });

            List <SerializationInfo> deserialized = dc.ReadObject(reader) as List <SerializationInfo>;

            _deserializationReferences = new Dictionary <int, IMobileObject>();
            foreach (SerializationInfo info in deserialized)
            {
                Type type = Type.GetType(info.TypeName);
                if (type == null)
                {
                    throw new SerializationException(string.Format(
                                                         Resources.MobileFormatterUnableToDeserialize,
                                                         info.TypeName));
                }

#if SILVERLIGHT
                IMobileObject mobile = (IMobileObject)Activator.CreateInstance(type);
#else
                IMobileObject mobile = (IMobileObject)Activator.CreateInstance(type, true);
#endif
                _deserializationReferences.Add(info.ReferenceId, mobile);

                mobile.SetState(info);
            }

            foreach (SerializationInfo info in deserialized)
            {
                IMobileObject mobile = _deserializationReferences[info.ReferenceId];
                mobile.SetChildren(info, this);
            }

            foreach (SerializationInfo info in deserialized)
            {
                ISerializationNotification notifiable = _deserializationReferences[info.ReferenceId] as ISerializationNotification;
                if (notifiable != null)
                {
                    notifiable.Deserialized();
                }
            }

            return(_deserializationReferences.Count > 0 ? _deserializationReferences[1] : null);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Deserialize an object from DTO graph.
        /// </summary>
        ///<param name="deserialized">DTO group to deserialize</param>
        /// <returns></returns>
        public object DeserializeAsDTO(List <SerializationInfo> deserialized)
        {
            _deserializationReferences = new Dictionary <int, IMobileObject>();
            foreach (SerializationInfo info in deserialized)
            {
                var  typeName = AssemblyNameTranslator.GetAssemblyQualifiedName(info.TypeName);
                Type type     = GetTypeFromCache(typeName);

                if (type == null)
                {
                    throw new SerializationException(string.Format(
                                                         Resources.MobileFormatterUnableToDeserialize, typeName));
                }
                else if (type == typeof(NullPlaceholder))
                {
                    _deserializationReferences.Add(info.ReferenceId, null);
                }
                else
                {
#if !NET40 && !NET45
                    if (type.Equals(typeof(Security.CslaClaimsPrincipal)))
                    {
                        var state = info.GetValue <byte[]>("s");
                        using (var buffer = new System.IO.MemoryStream(state))
                        {
                            using (var reader = new System.IO.BinaryReader(buffer))
                            {
                                IMobileObject mobile = (IMobileObject) new Security.CslaClaimsPrincipal(reader);
                                _deserializationReferences.Add(info.ReferenceId, mobile);
                            }
                        }
                    }
                    else
                    {
                        IMobileObject mobile = (IMobileObject)Activator.CreateInstance(type, true);

                        _deserializationReferences.Add(info.ReferenceId, mobile);

                        ConvertEnumsFromIntegers(info);
                        mobile.SetState(info);
                    }
#else
                    IMobileObject mobile = (IMobileObject)Activator.CreateInstance(type, true);

                    _deserializationReferences.Add(info.ReferenceId, mobile);

                    ConvertEnumsFromIntegers(info);
                    mobile.SetState(info);
#endif
                }
            }

            foreach (SerializationInfo info in deserialized)
            {
                IMobileObject mobile = _deserializationReferences[info.ReferenceId];

                if (mobile != null)
                {
                    mobile.SetChildren(info, this);
                }
            }

            foreach (SerializationInfo info in deserialized)
            {
                ISerializationNotification notifiable = _deserializationReferences[info.ReferenceId] as ISerializationNotification;
                if (notifiable != null)
                {
                    notifiable.Deserialized();
                }
            }
            return(_deserializationReferences.Count > 0 ? _deserializationReferences[1] : null);
        }