Ejemplo n.º 1
0
        public override void Execute(IglTokenExecutionContext context)
        {
            var objType          = context.TypeMap[ObjectType.Index];
            var streamingContext = new StreamingContext(StreamingContextStates.Other);
            var info             = new SerializationInfo(objType, new FormatterConverter());

            foreach (var kv in Blob)
            {
                var nameInfo  = kv.Key;
                var valueInfo = context.Storage[kv.Value];
                info.AddValue(nameInfo, valueInfo);
            }

            var ctor = objType.GetBestConstructor(BindingFlags.Instance | BindingFlags.NonPublic,
                                                  typeof(SerializationInfo),
                                                  typeof(StreamingContext));

            if (null == ctor)
            {
                throw new EntryPointNotFoundException();
            }

            var rootObject = context.Storage[ObjectId];

            ctor.Invoke(rootObject,
                        new object[] {
                info,
                streamingContext
            });

            if (rootObject is IDeserializationCallback callback)
            {
                callback.OnDeserialization(info);
            }
        }
Ejemplo n.º 2
0
        public override void Execute(IglTokenExecutionContext context)
        {
            var src = Blob.Select(id => context.Storage[id]).ToArray();
            var dst = context.Storage[ObjectId];

            if (dst is Array arrayDest)
            {
                src.CopyTo(arrayDest, 0);
            }
            else
            {
                var destinationElementType = dst.GetType().GetElementTypeOfEnumerable();
                var argType = typeof(IEnumerable <>).MakeGenericType(destinationElementType);
                var ctor    = dst.GetType().GetBestConstructor(argType);
                if (ctor != null)
                {
                    var tmpArray = Array.CreateInstance(destinationElementType, src.Length);
                    src.CopyTo(tmpArray, 0);
                    ctor.Invoke(dst, new object[] { tmpArray });
                    return;
                }

                if (dst is IList list)
                {
                    foreach (var element in src)
                    {
                        list.Add(element);
                    }
                }
                else
                {
                    throw new InvalidOperationException();
                }
            }
        }
Ejemplo n.º 3
0
        public override void Execute(IglTokenExecutionContext context)
        {
            var instance = context.Storage[ObjectId];

            if (instance == null)
            {
                return;
            }

            var value       = context.Storage[ValueId];
            var intanceType = instance.GetType();

            var fi = intanceType.GetField(FieldName,
                                          BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);

            fi.SetValue(instance, value);
        }
Ejemplo n.º 4
0
        public override void Execute(IglTokenExecutionContext context)
        {
            var type = context.TypeMap[TypeId];

            if (ArrayDetails.Length == 0)
            {
                context.Storage[Index] = FormatterServices.GetUninitializedObject(type);
            }
            else if (ArrayDetails.Length > 1)
            {
                throw new NotSupportedException();
            }
            else
            {
                context.Storage[Index] = Array.CreateInstance(type.GetElementType(), ArrayDetails[0].Item1);
            }
        }
Ejemplo n.º 5
0
 public override void Execute(IglTokenExecutionContext context)
 {
     Blob.CopyTo((Array)context.Storage[ObjectId], 0);
 }
Ejemplo n.º 6
0
 public override void Execute(IglTokenExecutionContext context)
 {
     context.Storage[Index] = Value;
 }
Ejemplo n.º 7
0
 public override void Execute(IglTokenExecutionContext context)
 {
     context.TypeMap[Index] = Type.GetType(TypeName);
 }
Ejemplo n.º 8
0
 public abstract void Execute(IglTokenExecutionContext context);