/// <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); }
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); }
/// <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); }
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()); }
public DefaultCommandConvention(ICollectionBuilder collectionBuilder) : base(collectionBuilder) { }
public DefaultScalarConvention(ICollectionBuilder collectionBuilder) : base(collectionBuilder) { }
/// <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; }
/// <inheritdoc /> void ICollectionBuilder.RegisterWith(IRegister register) { ICollectionBuilder <ModelMappingCollection, ModelMap> self = this; register.Register(self.CreateCollection, Lifetime.Singleton); }