protected override object ConvertBack(object value, Type targetType, object parameter)
        {
            decimal tmp    = 0.0M;
            decimal?result = null;

            if (decimal.TryParse(value as string, out tmp))
            {
                result = tmp;
            }

            return(BoxingCache.GetBoxedValue(result));
        }
Exemple #2
0
        public void ReturnsSameReferenceMultipleTimes_Int()
        {
            var boxingCache = new BoxingCache <int>();

            var boxedValue_42_1 = boxingCache.GetBoxedValue(42);
            var boxedValue_42_2 = boxingCache.GetBoxedValue(42);

            Assert.IsTrue(ReferenceEquals(boxedValue_42_1, boxedValue_42_2));

            var boxedValue_84_1 = boxingCache.GetBoxedValue(84);
            var boxedValue_84_2 = boxingCache.GetBoxedValue(84);

            Assert.IsTrue(ReferenceEquals(boxedValue_84_1, boxedValue_84_2));
        }
Exemple #3
0
        public void UnboxesCorrectly_Bool()
        {
            var boxingCache = new BoxingCache <bool>();

            var boxedBoolValue_True   = (object)true;
            var unboxedBoolValue_True = boxingCache.GetUnboxedValue(boxedBoolValue_True);

            Assert.AreEqual(true, unboxedBoolValue_True);

            var boxedBoolValue_False   = (object)false;
            var unboxedBoolValue_False = boxingCache.GetUnboxedValue(boxedBoolValue_False);

            Assert.AreEqual(false, unboxedBoolValue_False);
        }
Exemple #4
0
        public void ReturnsSameReferenceMultipleTimes_Bool()
        {
            var boxingCache = new BoxingCache <bool>();

            var boxedValue_True_1 = boxingCache.GetBoxedValue(true);
            var boxedValue_True_2 = boxingCache.GetBoxedValue(true);

            Assert.IsTrue(ReferenceEquals(boxedValue_True_1, boxedValue_True_2));

            var boxedValue_False_1 = boxingCache.GetBoxedValue(false);
            var boxedValue_False_2 = boxingCache.GetBoxedValue(false);

            Assert.IsTrue(ReferenceEquals(boxedValue_False_1, boxedValue_False_2));
        }
Exemple #5
0
        /// <summary>
        /// Sets the member value.
        /// </summary>
        /// <param name="model">The model.</param>
        /// <param name="member">The member.</param>
        /// <param name="modelInfo">The model information.</param>
        public virtual void SetMemberValue(object model, MemberValue member, SerializationModelInfo modelInfo)
        {
            var modelType = model.GetType();

            try
            {
                var finalValue = BoxingCache.GetBoxedValue(member.Value);

                // In this very special occasion, we will not use ObjectAdapter since it
                // will cause property change notifications (which we don't want during deserialization)
                var modelEditor = model as IModelEditor;
                if (modelEditor != null && modelInfo.CatelPropertyNames.Contains(member.Name))
                {
                    modelEditor.SetValueFastButUnsecure(member.Name, finalValue);
                    return;
                }

                _objectAdapter.SetMemberValue(model, member.Name, finalValue);
            }
            catch (Exception ex)
            {
                Log.Warning(ex, $"Failed to populate '{modelType.GetSafeFullName(false)}.{member.Name}', setting the member value threw an exception");
            }
        }