/// <summary> /// Sets the value. /// </summary> /// <param name="target">The target to set the value on.</param> /// <param name="value">The value to set on the target.</param> public void SetValue(object target, object value) { try { if (_setter == null) { _setter = DynamicReflectionDelegateFactory.Instance.CreateSet <object>(_memberInfo); } #if DEBUG // dynamic method doesn't check whether the type is 'legal' to set // add this check for unit tests if (value == null) { if (!ReflectionUtils.IsNullable(ReflectionUtils.GetMemberUnderlyingType(_memberInfo))) { throw new JsonSerializationException("Incompatible value. Cannot set {0} to null.".FormatWith(CultureInfo.InvariantCulture, _memberInfo)); } } else if (!ReflectionUtils.GetMemberUnderlyingType(_memberInfo).IsAssignableFrom(value.GetType())) { throw new JsonSerializationException("Incompatible value. Cannot set {0} to type {1}.".FormatWith(CultureInfo.InvariantCulture, _memberInfo, value.GetType())); } #endif _setter(target, value); } catch (Exception ex) { throw new JsonSerializationException("Error setting value to '{0}' on '{1}'.".FormatWith(CultureInfo.InvariantCulture, _memberInfo.Name, target.GetType()), ex); } }
public static TException Throws <TException>(ActionNewton action, params string[] possibleMessages) where TException : Exception { try { action(); Assert.Fail("Exception of type {0} expected. No exception thrown.", typeof(TException).Name); return(null); } catch (TException ex) { if (possibleMessages == null || possibleMessages.Length == 0) { return(ex); } foreach (string possibleMessage in possibleMessages) { if (StringAssert.Equals(possibleMessage, ex.Message)) { return(ex); } } throw new Exception("Unexpected exception message." + Environment.NewLine + "Expected one of: " + string.Join(Environment.NewLine, possibleMessages) + Environment.NewLine + "Got: " + ex.Message + Environment.NewLine + Environment.NewLine + ex); } catch (Exception ex) { throw new Exception(string.Format("Exception of type {0} expected; got exception of type {1}.", typeof(TException).Name, ex.GetType().Name), ex); } }
public void CreateSetWithBadObjectValue() { ExceptionAssert.Throws <InvalidCastException>(() => { Movie m = new Movie(); ActionNewton <object, object> setter = DynamicReflectionDelegateFactory.Instance.CreateSet <object>(typeof(Movie).GetProperty("Name")); setter(m, new Version("1.1.1.1")); }, "Unable to cast object of type 'System.Version' to type 'System.String'."); }
public void CreateSetWithBadTarget() { ExceptionAssert.Throws <InvalidCastException>(() => { object structTest = new StructTest(); ActionNewton <object, object> setter = DynamicReflectionDelegateFactory.Instance.CreateSet <object>(typeof(StructTest).GetProperty("StringProperty")); setter(structTest, "Hi"); Assert.AreEqual("Hi", ((StructTest)structTest).StringProperty); setter(new TimeSpan(), "Hi"); }, "Specified cast is not valid."); }
public void CreateSetWithBadObjectTarget() { ExceptionAssert.Throws <InvalidCastException>(() => { Person p = new Person(); Movie m = new Movie(); ActionNewton <object, object> setter = DynamicReflectionDelegateFactory.Instance.CreateSet <object>(typeof(Movie).GetProperty("Name")); setter(m, "Hi"); Assert.AreEqual(m.Name, "Hi"); setter(p, "Hi"); Assert.AreEqual(p.Name, "Hi"); }, "Unable to cast object of type 'Newtonsoft.Json.Tests.TestObjects.Organization.Person' to type 'Newtonsoft.Json.Tests.TestObjects.Movie'."); }
public void SetValue(object target, string member, object value) { ActionNewton <object, object> setter = Members[member].Setter; setter(target, value); }