/// <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); }
/// <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); }
/// <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); }