public void OverrideCSLAConstructor()
        {
            // TODO : Discuss - Only being used by Clone
            // WCF always uses NetDataContractAttribute

            var fields = typeof(Csla.Reflection.MethodCaller)
                         .GetFields(System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic)
                         .Where(x => x.Name == @"_ctorCache").Single();

            var dict = (Dictionary <Type, DynamicCtorDelegate>)fields.GetValue(null);

            ConstructorInfo info = typeof(Csla.Serialization.BinaryFormatterWrapper)
                                   .GetConstructor(BindingFlags.Instance | BindingFlags.Public, null, Type.EmptyTypes, null);

            Func <BinaryFormatterWrapper> func = () =>
            {
                var f = new BinaryFormatterWrapper();
                f.Formatter.Context = new StreamingContext(StreamingContextStates.All, @"Keith");
                return(f);
            };

            MethodCallExpression method = Expression.Call(Expression.Constant(func.Target), func.Method);

            var exp = Expression.Lambda <DynamicCtorDelegate>(method).Compile();

            dict[typeof(BinaryFormatterWrapper)] = exp;

            var formatter = Csla.Serialization.SerializationFormatterFactory.GetFormatter();
        }
Пример #2
0
    public void TestSerializableEventsActionSucceeds()
    {
      var root = new OverrideSerializationRoot();
      var nonSerClass = new NonSerializedClass();

      Action<object, PropertyChangedEventArgs> h = (sender, eventArgs) => { nonSerClass.Do(); };
      var method = typeof (Action<object, PropertyChangedEventArgs>).GetMethod("Invoke");
      var delgate = (PropertyChangedEventHandler)(object)method.CreateDelegate(typeof (PropertyChangedEventHandler), h);
      root.PropertyChanged += delgate;

      Action<object, PropertyChangingEventArgs> h1 = (sender, eventArgs) => { nonSerClass.Do(); };
      var method1 = typeof(Action<object, PropertyChangingEventArgs>).GetMethod("Invoke");
      var delgate1 = (PropertyChangingEventHandler)(object)method1.CreateDelegate(typeof(PropertyChangingEventHandler), h1);
      root.PropertyChanging += delgate1;

      var b = new BinaryFormatterWrapper();
      b.Serialize(new MemoryStream(), root);
    }
Пример #3
0
 public void TestSerializableEventsActionFails()
 {
   var root = new SerializationRoot();
   var nonSerClass = new NonSerializedClass();
   Action<object, PropertyChangedEventArgs> h = (sender, eventArgs) => { nonSerClass.Do(); };
   var method = typeof (Action<object, PropertyChangedEventArgs>).GetMethod("Invoke");
   var delgate = (PropertyChangedEventHandler)(object)method.CreateDelegate(typeof (PropertyChangedEventHandler), h);
   root.PropertyChanged += delgate;
   var b = new BinaryFormatterWrapper();
   try
   {
     b.Serialize(new MemoryStream(), root);
     Assert.Fail("Serialization should have thrown an exception");
   }
   catch (System.Runtime.Serialization.SerializationException)
   {
     // serialization failed as expected
   }
 }
Пример #4
0
        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;
        }