/// <summary> /// Deserializes child objects. /// </summary> /// <param name="info">Serialization state</param> /// <param name="formatter">Serializer instance</param> protected override void OnSetChildren(SerializationInfo info, MobileFormatter formatter) { foreach (IPropertyInfo property in _propertyList) { if (info.Children.ContainsKey(property.Name)) { SerializationInfo.ChildData childData = info.Children[property.Name]; IFieldData data = GetOrCreateFieldData(property); data.Value = formatter.GetObject(childData.ReferenceId); if (!childData.IsDirty) { data.MarkClean(); } } } base.OnSetChildren(info, formatter); }
private Csla.Server.Hosts.HttpChannel.CriteriaRequest GetBaseCriteriaRequest() { var request = new Csla.Server.Hosts.HttpChannel.CriteriaRequest(); request.CriteriaData = null; request.ClientContext = MobileFormatter.Serialize(ApplicationContext.ClientContext); request.GlobalContext = MobileFormatter.Serialize(ApplicationContext.GlobalContext); if (ApplicationContext.AuthenticationType == "Windows") { request.Principal = MobileFormatter.Serialize(null); } else { request.Principal = MobileFormatter.Serialize(ApplicationContext.User); } request.ClientCulture = System.Globalization.CultureInfo.CurrentCulture.Name; request.ClientUICulture = System.Globalization.CultureInfo.CurrentUICulture.Name; return(request); }
/// <summary> /// Override this method to insert your field values /// into the MobileFormatter serialzation stream. /// </summary> /// <param name="info"> /// Object containing the data to serialize. /// </param> /// <param name="mode"> /// The StateMode indicating why this method was invoked. /// </param> protected override void OnGetState(SerializationInfo info, StateMode mode) { info.AddValue("_processThroughPriority", _processThroughPriority); info.AddValue("_ruleSet", _ruleSet); info.AddValue("_cascadeWhenChanged", _cascadeOnDirtyProperties); //info.AddValue("_isBusy", _isBusy); #if (ANDROID || IOS) || NETFX_CORE if (mode == StateMode.Serialization) { if (_stateStack.Count > 0) { MobileList <SerializationInfo> list = new MobileList <SerializationInfo>(_stateStack.ToArray()); byte[] xml = MobileFormatter.Serialize(list); info.AddValue("_stateStack", xml); } } #endif base.OnGetState(info, mode); }
/// <summary> /// Called by <see cref="DataPortal" /> to update a /// business object. /// </summary> /// <param name="obj">The business object to update.</param> /// <param name="context"> /// <see cref="Server.DataPortalContext" /> object passed to the server. /// </param> /// <param name="isSync">True if the client-side proxy should synchronously invoke the server.</param> #pragma warning disable 1998 public async Task <DataPortalResult> Update(object obj, DataPortalContext context, bool isSync) #pragma warning restore 1998 { DataPortalResult result; try { var request = GetBaseUpdateCriteriaRequest(); request.ObjectData = MobileFormatter.Serialize(obj); request = ConvertRequest(request); var serialized = MobileFormatter.Serialize(request); serialized = await CallDataPortalServer(serialized, "update", GetRoutingToken(obj.GetType()), isSync); var response = (Csla.Server.Hosts.HttpChannel.HttpResponse)MobileFormatter.Deserialize(serialized); response = ConvertResponse(response); var globalContext = (ContextDictionary)MobileFormatter.Deserialize(response.GlobalContext); if (response != null && response.ErrorData == null) { var newobj = MobileFormatter.Deserialize(response.ObjectData); result = new DataPortalResult(newobj, null, globalContext); } else if (response != null && response.ErrorData != null) { var ex = new DataPortalException(response.ErrorData); result = new DataPortalResult(null, ex, globalContext); } else { throw new DataPortalException("null response", null); } } catch (Exception ex) { result = new DataPortalResult(null, ex, null); } if (result.Error != null) { throw result.Error; } return(result); }
void IUndoableObject.CopyState(int parentEditLevel, bool parentBindingEdit) { if (((IUndoableObject)this).EditLevel + 1 > parentEditLevel) { throw new UndoException(string.Format(Properties.Resources.EditLevelMismatchException, "CopyState"), this.GetType().Name, null, ((IUndoableObject)this).EditLevel, parentEditLevel - 1); } SerializationInfo state = new SerializationInfo(0); OnGetState(state, StateMode.Undo); if (_brokenRules != null && _brokenRules.Count > 0) { byte[] rules = MobileFormatter.Serialize(_brokenRules); state.AddValue("_rules", Convert.ToBase64String(rules)); } _stateStack.Push(state); }
private WcfPortal.UpdateRequest GetBaseUpdateCriteriaRequest() { var request = new WcfPortal.UpdateRequest(); request.ObjectData = null; request.ClientContext = MobileFormatter.Serialize(ApplicationContext.ClientContext); request.GlobalContext = MobileFormatter.Serialize(ApplicationContext.GlobalContext); if (ApplicationContext.AuthenticationType == "Windows") { request.Principal = MobileFormatter.Serialize(null); } else { request.Principal = MobileFormatter.Serialize(ApplicationContext.User); } request.ClientCulture = System.Threading.Thread.CurrentThread.CurrentCulture.Name; request.ClientUICulture = System.Threading.Thread.CurrentThread.CurrentUICulture.Name; return(request); }
/// <summary> /// Called by the client-side DataPortal to update a /// business object. /// </summary> /// <param name="obj">Business object to update.</param> /// <param name="context">Server.DataPortalContext object passed to the server.</param> /// <param name="isSync">True if the client-side proxy should synchronously invoke the server.</param> public async Task <DataPortalResult> Update(object obj, DataPortalContext context, bool isSync) { DataPortalResult result = null; if (isSync) { throw new NotSupportedException("isSync == true"); } try { var contextData = Csla.Serialization.Mobile.MobileFormatter.Serialize(context); var objectData = Csla.Serialization.Mobile.MobileFormatter.Serialize(obj); var portal = new BrokeredHost(); var resultData = await portal.Update(objectData, contextData); var response = (Csla.Server.Hosts.HttpChannel.HttpResponse)Csla.Serialization.Mobile.MobileFormatter.Deserialize(resultData.ToArray()); var globalContext = (Csla.Core.ContextDictionary)Csla.Serialization.Mobile.MobileFormatter.Deserialize(response.GlobalContext); if (response != null && response.ErrorData == null) { obj = MobileFormatter.Deserialize(response.ObjectData); result = new DataPortalResult(obj, null, globalContext); } else if (response != null && response.ErrorData != null) { var ex = new DataPortalException(response.ErrorData); result = new DataPortalResult(null, ex, globalContext); } else { throw new DataPortalException("null response", null); } } catch (Exception ex) { result = new DataPortalResult(null, ex, null); } if (result.Error != null) { throw result.Error; } return(result); }
public WcfResponse Delete(CriteriaRequest request) { var result = new WcfResponse(); try { request = ConvertRequest(request); // unpack criteria data into object object criteria = GetCriteria(request.CriteriaData); if (criteria is Csla.DataPortalClient.PrimitiveCriteria) { criteria = ((Csla.DataPortalClient.PrimitiveCriteria)criteria).Value; } var processor = new MobileRequestProcessor(); var deleteRequest = new MobileCriteriaRequest( request.TypeName, criteria, (IPrincipal)MobileFormatter.Deserialize(request.Principal), (ContextDictionary)MobileFormatter.Deserialize(request.GlobalContext), (ContextDictionary)MobileFormatter.Deserialize(request.ClientContext), request.ClientCulture, request.ClientUICulture); var deleteResponse = processor.Delete(deleteRequest); if (deleteResponse.Error != null) { result.ErrorData = new WcfErrorInfo(deleteResponse.Error); } result.GlobalContext = MobileFormatter.Serialize(deleteResponse.GlobalContext); result.ObjectData = MobileFormatter.Serialize(deleteResponse.Object); } catch (Exception ex) { result.ErrorData = new WcfErrorInfo(ex); } finally { MobileRequestProcessor.ClearContext(); } return(ConvertResponse(result)); }
public async Task <WcfResponse> Update(UpdateRequest request) #endif { var result = new WcfResponse(); try { request = ConvertRequest(request); // unpack object object obj = GetCriteria(request.ObjectData); var processor = new MobileRequestProcessor(); var updateRequest = new MobileUpdateRequest( obj, (IPrincipal)MobileFormatter.Deserialize(request.Principal), (ContextDictionary)MobileFormatter.Deserialize(request.GlobalContext), (ContextDictionary)MobileFormatter.Deserialize(request.ClientContext), request.ClientCulture, request.ClientUICulture); #if NET40 var updateResponse = processor.Update(updateRequest); #else var updateResponse = await processor.Update(updateRequest).ConfigureAwait(false); #endif if (updateResponse.Error != null) { result.ErrorData = new WcfErrorInfo(updateResponse.Error); } result.GlobalContext = MobileFormatter.Serialize(updateResponse.GlobalContext); result.ObjectData = MobileFormatter.Serialize(updateResponse.Object); } catch (Exception ex) { result.ErrorData = new WcfErrorInfo(ex); } finally { MobileRequestProcessor.ClearContext(); } return(ConvertResponse(result)); }
/// <summary> /// Called by <see cref="DataPortal" /> to update a /// business object. /// </summary> /// <param name="obj">The business object to update.</param> /// <param name="context"> /// <see cref="Server.DataPortalContext" /> object passed to the server. /// </param> /// <param name="isSync">True if the client-side proxy should synchronously invoke the server.</param> #pragma warning disable 1998 public async Task <DataPortalResult> Update(object obj, DataPortalContext context, bool isSync) #pragma warning restore 1998 { var request = GetBaseUpdateCriteriaRequest(); request.ObjectData = MobileFormatter.Serialize(obj); request = ConvertRequest(request); var proxy = GetProxy(); DataPortalResult result = null; try { var response = await proxy.UpdateAsync(request); response = ConvertResponse(response); var globalContext = (ContextDictionary)MobileFormatter.Deserialize(response.GlobalContext); if (response != null && response.ErrorData == null) { var newobj = MobileFormatter.Deserialize(response.ObjectData); result = new DataPortalResult(newobj, null, globalContext); } else if (response != null && response.ErrorData != null) { var ex = new DataPortalException(response.ErrorData); result = new DataPortalResult(null, ex, globalContext); } else { throw new DataPortalException("null response", null); } } catch (Exception ex) { result = new DataPortalResult(null, ex, null); } if (result.Error != null) { throw result.Error; } return(result); }
public void BusinessObjectWithEnum() { UnitTestContext context = GetContext(); // Setup the customer w/ logically identical contacts CustomerWithEnum customer = new CustomerWithEnum(); customer.Name = "Test Customer"; customer.Quality = CustomerQuality.Good; // Serialize and deserialize the customer var buffer = MobileFormatter.Serialize(customer); var deserializedCustomer = (CustomerWithEnum)MobileFormatter.Deserialize(buffer); // Verify the deserialized customer is identical to the original object context.Assert.AreEqual(customer.Name, deserializedCustomer.Name); context.Assert.AreEqual(customer.Quality, deserializedCustomer.Quality); context.Assert.Success(); context.Complete(); }
/// <summary> /// Override this method to manually serialize child objects /// contained within the current object. /// </summary> /// <param name="info">Object containing serialized values.</param> /// <param name="formatter">Reference to the current MobileFormatter.</param> protected virtual void OnGetChildren(SerializationInfo info, MobileFormatter formatter) { bool mobileChildren = typeof(IMobileObject).IsAssignableFrom(typeof(T)); int count = 0; foreach (T child in this) { if (mobileChildren) { SerializationInfo si = formatter.SerializeObject(child); info.AddChild(_valuePrefix + count, si.ReferenceId); } else { info.AddValue(_valuePrefix + count, child); } count++; } info.AddValue("count", count); }
/// <summary> /// Override this method to manually deserialize child objects /// from data in the serialization stream. /// </summary> /// <param name="info">Object containing serialized values.</param> /// <param name="formatter">Reference to the current MobileFormatter.</param> protected virtual void OnSetChildren(SerializationInfo info, MobileFormatter formatter) { bool mobileChildren = typeof(IMobileObject).IsAssignableFrom(typeof(T)); int count = info.GetValue <int>("count"); for (int index = 0; index < count; index++) { T value; if (mobileChildren) { value = (T)formatter.GetObject(info.Children[_valuePrefix + index].ReferenceId); } else { value = info.GetValue <T>(_valuePrefix + index); } Add(value); } }
/// <summary> /// Update a business object. /// </summary> /// <param name="request">The request parameter object.</param> #pragma warning disable 1998 public async Task <HttpResponse> Update(UpdateRequest request) #pragma warning restore 1998 { var result = new HttpResponse(); try { request = ConvertRequest(request); // unpack object object obj = GetCriteria(request.ObjectData); var context = new DataPortalContext( (IPrincipal)MobileFormatter.Deserialize(request.Principal), true, request.ClientCulture, request.ClientUICulture, (ContextDictionary)MobileFormatter.Deserialize(request.ClientContext), (ContextDictionary)MobileFormatter.Deserialize(request.GlobalContext)); var prtl = new Csla.Server.DataPortal(); var dpr = await prtl.Update(obj, context, true); if (dpr.Error != null) { result.ErrorData = new HttpErrorInfo(dpr.Error); } result.GlobalContext = MobileFormatter.Serialize(dpr.GlobalContext); result.ObjectData = MobileFormatter.Serialize(dpr.ReturnObject); } catch (Exception ex) { result.ErrorData = new HttpErrorInfo(ex); throw; } finally { result = ConvertResponse(result); } return(result); }
public WcfResponse Create(CriteriaRequest request) { var result = new WcfResponse(); try { request = ConvertRequest(request); // unpack criteria data into object object criteria = GetCriteria(request.CriteriaData); if (criteria is PrimitiveCriteria) { criteria = ((PrimitiveCriteria)criteria).Value; } SilverlightRequestProcessor processor = new SilverlightRequestProcessor(); SilverlightCriteriaRequest createRequest = new SilverlightCriteriaRequest( request.TypeName, criteria, (IPrincipal)MobileFormatter.Deserialize(request.Principal), (ContextDictionary)MobileFormatter.Deserialize(request.GlobalContext), (ContextDictionary)MobileFormatter.Deserialize(request.ClientContext)); SilverlightResponse createResponse = processor.Create(createRequest); if (createResponse.Error != null) { result.ErrorData = new WcfErrorInfo(createResponse.Error); } result.GlobalContext = MobileFormatter.Serialize(createResponse.GlobalContext); result.ObjectData = MobileFormatter.Serialize(createResponse.Object); } catch (Exception ex) { result.ErrorData = new WcfErrorInfo(ex); } finally { SilverlightRequestProcessor.ClearContext(); } return(ConvertResponse(result)); }
/// <summary> /// Get an existing business object. /// </summary> /// <param name="request">The request parameter object.</param> #pragma warning disable 1998 public async Task <HttpResponse> Fetch(CriteriaRequest request) #pragma warning restore 1998 { var result = new HttpResponse(); try { request = ConvertRequest(request); // unpack criteria data into object object criteria = GetCriteria(request.CriteriaData); if (criteria is Csla.DataPortalClient.PrimitiveCriteria) { criteria = ((Csla.DataPortalClient.PrimitiveCriteria)criteria).Value; } var objectType = Csla.Reflection.MethodCaller.GetType(request.TypeName, true); var context = new DataPortalContext( (IPrincipal)MobileFormatter.Deserialize(request.Principal), true, request.ClientCulture, request.ClientUICulture, (ContextDictionary)MobileFormatter.Deserialize(request.ClientContext), (ContextDictionary)MobileFormatter.Deserialize(request.GlobalContext)); var prtl = new Csla.Server.DataPortal(); var dpr = await prtl.Fetch(objectType, criteria, context, true); if (dpr.Error != null) { result.ErrorData = new HttpErrorInfo(dpr.Error); } result.GlobalContext = MobileFormatter.Serialize(dpr.GlobalContext); result.ObjectData = MobileFormatter.Serialize(dpr.ReturnObject); } catch (Exception ex) { result.ErrorData = new HttpErrorInfo(ex); } return(ConvertResponse(result)); }
public void MobileDictionary_MobileKey_PrimitiveValue() { UnitTestContext context = GetContext(); var d = new MobileDictionary <MockReadOnly, string>(); d.Add(new MockReadOnly(1), "v1"); d.Add(new MockReadOnly(2), "v2"); d.Add(new MockReadOnly(3), "v3"); d.Add(new MockReadOnly(4), "v4"); d.Add(new MockReadOnly(5), "v5"); byte[] buffer = MobileFormatter.Serialize(d); var r = (MobileDictionary <MockReadOnly, string>)MobileFormatter.Deserialize(buffer); foreach (var key in r.Keys) { context.Assert.AreEqual(key.Id, Convert.ToInt32(r[key].Substring(1))); } context.Assert.Success(); context.Complete(); }
public void MobileDictionary_MobileKey_MobileValue() { UnitTestContext context = GetContext(); var d = new MobileDictionary <MockReadOnly, MockReadOnly>(); d.Add(new MockReadOnly(21), new MockReadOnly(1)); d.Add(new MockReadOnly(22), new MockReadOnly(2)); d.Add(new MockReadOnly(23), new MockReadOnly(3)); d.Add(new MockReadOnly(24), new MockReadOnly(4)); d.Add(new MockReadOnly(25), new MockReadOnly(5)); byte[] buffer = MobileFormatter.Serialize(d); var r = (MobileDictionary <MockReadOnly, MockReadOnly>)MobileFormatter.Deserialize(buffer); foreach (var key in r.Keys) { context.Assert.AreEqual(key.Id, r[key].Id + 20); } context.Assert.Success(); context.Complete(); }
private Csla.Server.Hosts.HttpChannel.UpdateRequest GetBaseUpdateCriteriaRequest() { var request = new Csla.Server.Hosts.HttpChannel.UpdateRequest { ObjectData = null, ClientContext = MobileFormatter.Serialize(ApplicationContext.ClientContext), GlobalContext = MobileFormatter.Serialize(ApplicationContext.GlobalContext) }; if (ApplicationContext.AuthenticationType == "Windows") { request.Principal = MobileFormatter.Serialize(null); } else { request.Principal = MobileFormatter.Serialize(ApplicationContext.User); } request.ClientCulture = Thread.CurrentThread.CurrentCulture.Name; request.ClientUICulture = Thread.CurrentThread.CurrentUICulture.Name; return(request); }
private Csla.Server.Hosts.HttpChannel.UpdateRequest GetBaseUpdateCriteriaRequest() { var request = new Csla.Server.Hosts.HttpChannel.UpdateRequest(); request.ObjectData = null; request.ClientContext = MobileFormatter.Serialize(ApplicationContext.ClientContext); #pragma warning disable CS0618 // Type or member is obsolete request.GlobalContext = MobileFormatter.Serialize(ApplicationContext.GlobalContext); #pragma warning restore CS0618 // Type or member is obsolete if (ApplicationContext.AuthenticationType == "Windows") { request.Principal = MobileFormatter.Serialize(null); } else { request.Principal = MobileFormatter.Serialize(ApplicationContext.User); } request.ClientCulture = Thread.CurrentThread.CurrentCulture.Name; request.ClientUICulture = Thread.CurrentThread.CurrentUICulture.Name; return(request); }
private async Task InvokePortal(string operation, Stream requestStream, Stream responseStream) { var serializer = new MobileFormatter(); var result = new HttpResponse(); HttpErrorInfo errorData = null; try { var request = serializer.Deserialize(requestStream); result = await CallPortal(operation, request); } catch (Exception ex) { errorData = new HttpErrorInfo(ex); } var portalResult = new HttpResponse { ErrorData = errorData, GlobalContext = result.GlobalContext, ObjectData = result.ObjectData }; serializer.Serialize(responseStream, portalResult); }
/// <summary> /// Serialize and then deserialize a PersonPOCO object, exercising the generated code /// associated with these two operations on the PersonPOCO test object /// </summary> /// <param name="valueToSerialize">The object to be serialized</param> /// <returns>The PersonPOCO that results from serialization then deserialization</returns> private PersonPOCO SerializeThenDeserialisePersonPOCO(PersonPOCO valueToSerialize) { IServiceCollection services = new ServiceCollection(); services.AddCsla(); var provider = services.BuildServiceProvider(); var ApplicationContext = provider.GetService <ApplicationContext>(); System.IO.MemoryStream serializationStream; PersonPOCO deserializedValue; MobileFormatter formatter = new MobileFormatter(ApplicationContext); // Act using (serializationStream = new System.IO.MemoryStream()) { formatter.Serialize(serializationStream, valueToSerialize); serializationStream.Seek(0, System.IO.SeekOrigin.Begin); deserializedValue = formatter.Deserialize(serializationStream) as PersonPOCO; } return(deserializedValue); }
protected virtual void OnGetChildren(SerializationInfo info, MobileFormatter formatter) { if (!typeof(IMobileObject).IsAssignableFrom(typeof(T))) { throw new InvalidOperationException(Resources.CannotSerializeCollectionsNotOfIMobileObject); } List <int> references = new List <int>(); for (int x = 0; x < this.Count; x++) { T child = this[x]; if (child != null) { SerializationInfo childInfo = formatter.SerializeObject(child); references.Add(childInfo.ReferenceId); } } if (references.Count > 0) { info.AddValue("$list", references); } }
private async Task <byte[]> InvokePortal(string operation, byte[] data) { var result = new HttpResponse(); HttpErrorInfo errorData = null; try { var buffer = new MemoryStream(data); buffer.Position = 0; var request = MobileFormatter.Deserialize(buffer.ToArray()); result = await CallPortal(operation, request); } catch (Exception ex) { errorData = new HttpErrorInfo(ex); } var portalResult = new HttpResponse { ErrorData = errorData, GlobalContext = result.GlobalContext, ObjectData = result.ObjectData }; var bytes = MobileFormatter.Serialize(portalResult); return(bytes); }
private async Task InvokePortal(string operation, Stream requestStream, Stream responseStream) { var serializer = new MobileFormatter(); var result = new HttpResponse(); HttpErrorInfo errorData = null; Response.Headers.Add("Content-type", "application/octet-stream,text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"); Response.Headers.Add("Accept-Encoding", "gzip,deflate"); try { var request = serializer.Deserialize(requestStream); result = await CallPortal(operation, request); } catch (Exception ex) { errorData = new HttpErrorInfo(ex); } var portalResult = new HttpResponse { ErrorData = errorData, GlobalContext = result.GlobalContext, ObjectData = result.ObjectData }; serializer.Serialize(responseStream, portalResult); }
private Csla.Server.Hosts.HttpChannel.CriteriaRequest GetBaseCriteriaRequest() { var request = new Csla.Server.Hosts.HttpChannel.CriteriaRequest { CriteriaData = null, ClientContext = MobileFormatter.Serialize(ApplicationContext.ClientContext), #pragma warning disable CS0618 // Type or member is obsolete GlobalContext = MobileFormatter.Serialize(ApplicationContext.GlobalContext) #pragma warning restore CS0618 // Type or member is obsolete }; if (ApplicationContext.AuthenticationType == "Windows") { request.Principal = MobileFormatter.Serialize(null); } else { request.Principal = MobileFormatter.Serialize(ApplicationContext.User); } request.ClientCulture = System.Globalization.CultureInfo.CurrentCulture.Name; request.ClientUICulture = System.Globalization.CultureInfo.CurrentUICulture.Name; return(request); }
public void If_FieldBackedString_Is_Changed_On_GrandChild_List_Item_After_Root_Is_Deserialized_Then_Root_ChildChanged_Event_Fires() { var root = new EditableGetSet(); var child = new EditableGetSet(true); var grandChild = new EditableGetSet(true); root.ManagedChildList.Add(child); child.ManagedChildList.Add(grandChild); byte[] buffer = MobileFormatter.Serialize(root); root = (EditableGetSet)MobileFormatter.Deserialize(buffer); int changed = 0; root.ChildChanged += (o, e) => { changed++; }; root.ManagedChildList[0].ManagedChildList[0].FieldBackedString = "changed"; Assert.AreEqual(1, changed, "after MobileFormatter"); changed = 0; root = root.Clone(); root.ChildChanged += (o, e) => { changed++; }; root.ManagedChildList[0].ManagedChildList[0].FieldBackedString = "changed again"; Assert.AreEqual(1, changed, "after clone"); }
void IUndoableObject.UndoChanges(int parentEditLevel, bool parentBindingEdit) { if (((IUndoableObject)this).EditLevel > 0) { if (((IUndoableObject)this).EditLevel - 1 < parentEditLevel) { throw new UndoException(string.Format(Properties.Resources.EditLevelMismatchException, "UndoChanges"), this.GetType().Name, null, ((IUndoableObject)this).EditLevel, parentEditLevel + 1); } SerializationInfo state = _stateStack.Pop(); OnSetState(state, StateMode.Undo); lock (SyncRoot) _brokenRules = null; if (state.Values.ContainsKey("_rules")) { byte[] rules = Convert.FromBase64String(state.GetValue <string>("_rules")); lock (SyncRoot) _brokenRules = (BrokenRulesCollection)MobileFormatter.Deserialize(rules); } } }
private async Task InvokeTextPortal(string operation, Stream requestStream, Stream responseStream) { string requestString; using (var reader = new StreamReader(requestStream)) requestString = await reader.ReadToEndAsync(); var requestArray = System.Convert.FromBase64String(requestString); var requestBuffer = new MemoryStream(requestArray); var serializer = new MobileFormatter(); var result = new HttpResponse(); HttpErrorInfo errorData = null; try { var request = serializer.Deserialize(requestBuffer); result = await CallPortal(operation, request); } catch (Exception ex) { errorData = new HttpErrorInfo(ex); } var portalResult = new HttpResponse { ErrorData = errorData, GlobalContext = result.GlobalContext, ObjectData = result.ObjectData }; var responseBuffer = new MemoryStream(); serializer.Serialize(responseBuffer, portalResult); responseBuffer.Position = 0; using (var writer = new StreamWriter(responseStream)) { writer.AutoFlush = true; await writer.WriteAsync(System.Convert.ToBase64String(responseBuffer.ToArray())); } }
public object Deserialize(Stream serializationStream) { try { var result = new MobileFormatter().Deserialize(serializationStream); var sysValue = result as SysState; if (sysValue != null) { var sysType = Type.GetType(sysValue.TypeName); result = TypeHelper.CoerceValue(sysType, sysValue.Value); } return(result); } catch //(SerializationException) { //序列化失败,说明不能反序列化为 IMobile,接着尝试使用 Binary } var result2 = new BinaryFormatterWrapper().Deserialize(serializationStream); return(result2); }
public object Deserialize(Stream serializationStream) { try { var result = new MobileFormatter().Deserialize(serializationStream); var sysValue = result as SysState; if (sysValue != null) { var sysType = Type.GetType(sysValue.TypeName); result = TypeHelper.CoerceValue(sysType, sysValue.Value); } return result; } catch //(SerializationException) { //序列化失败,说明不能反序列化为 IMobile,接着尝试使用 Binary } var result2 = new BinaryFormatterWrapper().Deserialize(serializationStream); return result2; }