Пример #1
0
        /// <summary>
        /// Evaluates the items in the expression and assigns them to the collection using the builder
        /// </summary>
        /// <param name="expression">the expression to evaluate</param>
        /// <param name="builder">builder used to build the collection</param>
        /// <param name="itemType">the type of the collection's elements</param>
        /// <param name="deserializer">deserializer instance to deserialize items</param>
        /// <returns>evaluated collection object</returns>
        protected virtual object EvaluateItems(ArrayExpression expression, ICollectionBuilder builder, Type itemType, IDeserializerHandler deserializer)
        {
            object result = null;
            bool   constructedEventSent = false;

            try
            {
                result = builder.GetReference();
                expression.OnObjectConstructed(result);
                constructedEventSent = true;
            }
            catch
            {
                // this might fail if the builder's not ready
            }
            foreach (Expression item in expression.Items)
            {
                item.ResultType = itemType;
                object itemResult = deserializer.Evaluate(item);
                builder.Add(itemResult);
            }
            result = builder.GetResult();
            if (!constructedEventSent)
            {
                expression.OnObjectConstructed(result);
            }
            return(result);
        }
Пример #2
0
        public virtual ICollectionBuilder <A, CC> Append(ITraversable <A> trav)
        {
            ICollectionBuilder <A, CC> builder = this;

            foreach (var item in trav)
            {
                builder = builder.Append(item);
            }
            return(builder);
        }
Пример #3
0
        /// <summary>
        /// Deserializes an expression by populating an existing object collection with the expression's items.
        /// </summary>
        /// <param name="expression">the expression to deserialize</param>
        /// <param name="existingObject">the collection to populate</param>
        /// <param name="deserializer">deserializer to deserialize list items</param>
        /// <returns>deserialized object</returns>
        public override object Evaluate(Expression expression, object existingObject, IDeserializerHandler deserializer)
        {
            Type               ItemType;
            ArrayExpression    list    = (ArrayExpression)expression;
            ICollectionBuilder builder = ConstructBuilder(existingObject, list, out ItemType);
            object             result  = EvaluateItems(list, builder, ItemType, deserializer);

            if (result is IDeserializationCallback)
            {
                ((IDeserializationCallback)result).OnAfterDeserialization();
            }
            return(result);
        }
Пример #4
0
        public static object Decode(PacketArray pa, Type t)
        {
            RaiseException.WhenTrue(t.IsArrayOf <object>(), "Cannot deserialize array of objects '{0}'!", t);
            RaiseException.WhenTrue(t.IsGenericListOf <object>(), "Cannot deserialize list of objects '{0}'!", t);

            ICollectionBuilder collectionBuilder = CreateCollectionBuilder(pa, t);

            foreach (Packet p in pa.Values)
            {
                object element = Decoder.Decode(p, collectionBuilder.ElementType);
                collectionBuilder.AddElement(element);
            }

            return(collectionBuilder.Build());
        }
Пример #5
0
 public DefaultCommandConvention(ICollectionBuilder collectionBuilder)
     : base(collectionBuilder)
 {
 }
Пример #6
0
 public DefaultScalarConvention(ICollectionBuilder collectionBuilder)
     : base(collectionBuilder)
 {
 }
Пример #7
0
 /// <summary>
 /// Evaluates the items in the expression and assigns them to the collection using the builder
 /// </summary>
 /// <param name="expression">the expression to evaluate</param>
 /// <param name="builder">builder used to build the collection</param>
 /// <param name="itemType">the type of the collection's elements</param>
 /// <param name="deserializer">deserializer instance to deserialize items</param>
 /// <returns>evaluated collection object</returns>
 protected virtual object EvaluateItems(ArrayExpression expression, ICollectionBuilder builder, Type itemType, IDeserializerHandler deserializer)
 {
     object result = null;
     bool constructedEventSent = false;
     try
     {
         result = builder.GetReference();
         expression.OnObjectConstructed(result);
         constructedEventSent = true;
     }
     catch
     {
         // this might fail if the builder's not ready
     }
     foreach (Expression item in expression.Items)
     {
         item.ResultType = itemType;
         object itemResult = deserializer.Evaluate(item);
         builder.Add(itemResult);
     }
     result = builder.GetResult();
     if (!constructedEventSent)
         expression.OnObjectConstructed(result);
     return result;
 }
Пример #8
0
        /// <inheritdoc />
        void ICollectionBuilder.RegisterWith(IRegister register)
        {
            ICollectionBuilder <ModelMappingCollection, ModelMap> self = this;

            register.Register(self.CreateCollection, Lifetime.Singleton);
        }