/// <summary> /// Override this method to manually deserialize child objects /// from data in the serialization stream. /// </summary> /// <param name="info">Object containing serialized values.</param> protected virtual void OnDeserializeRef(ISerializationContext info) { FieldsSerializationHelper.DeserialzeFields(this, info); bool mobileChildren = typeof(IMobileObject).IsAssignableFrom(typeof(T)); if (mobileChildren) { var formatter = info.RefFormatter; var references = info.GetState <object[]>("$list"); if (references != null) { foreach (int reference in references) { T child = (T)formatter.GetObject(reference); this.Add(child); } } } else { var bufferObj = info.GetState <object[]>("$list"); var buffer = new byte[bufferObj.Length]; for (int i = 0, c = bufferObj.Length; i < c; i++) { buffer[i] = (byte)(int)bufferObj[i]; } using (MemoryStream stream = new MemoryStream(buffer)) { var dcs = new serialization.DataContractSerializer(GetType()); MobileList <T> list = (MobileList <T>)dcs.ReadObject(stream); AddRange(list); } } }
/// <summary> /// Override this method to retrieve your child object /// references from the MobileFormatter serialzation stream. /// </summary> /// <param name="context">Object containing the data to serialize.</param> protected virtual void OnMobileDeserializeRef(ISerializationContext context) { FieldsSerializationHelper.DeserialzeFields(this, context); }
/// <summary> /// Override this method to retrieve extra field values to /// the serialization stream. /// </summary> /// <param name="info">Object containing field values.</param> protected virtual void OnDeserializeState(ISerializationContext info) { FieldsSerializationHelper.DeserialzeFields(this, info); }