diff --git a/Src/Newtonsoft.Json.Tests/Serialization/SerializationEventAttributeTests.cs b/Src/Newtonsoft.Json.Tests/Serialization/SerializationEventAttributeTests.cs index 87a9bf31..3c98b99f 100644 --- a/Src/Newtonsoft.Json.Tests/Serialization/SerializationEventAttributeTests.cs +++ b/Src/Newtonsoft.Json.Tests/Serialization/SerializationEventAttributeTests.cs @@ -48,41 +48,53 @@ namespace Newtonsoft.Json.Tests.Serialization [Test] public void ObjectEvents() { - SerializationEventTestObject obj = new SerializationEventTestObject(); + SerializationEventTestObject[] objs = new[] { new SerializationEventTestObject(), new DerivedSerializationEventTestObject() }; - Assert.AreEqual(11, obj.Member1); - Assert.AreEqual("Hello World!", obj.Member2); - Assert.AreEqual("This is a nonserialized value", obj.Member3); - Assert.AreEqual(null, obj.Member4); - Assert.AreEqual(null, obj.Member5); + foreach(SerializationEventTestObject current in objs) + { + SerializationEventTestObject obj = current; - string json = JsonConvert.SerializeObject(obj, Formatting.Indented); - Assert.AreEqual(@"{ - ""Member1"": 11, - ""Member2"": ""This value went into the data file during serialization."", - ""Member4"": null -}", json); + Assert.AreEqual(11, obj.Member1); + Assert.AreEqual("Hello World!", obj.Member2); + Assert.AreEqual("This is a nonserialized value", obj.Member3); + Assert.AreEqual(null, obj.Member4); + Assert.AreEqual(null, obj.Member5); - Assert.AreEqual(11, obj.Member1); - Assert.AreEqual("This value was reset after serialization.", obj.Member2); - Assert.AreEqual("This is a nonserialized value", obj.Member3); - Assert.AreEqual(null, obj.Member4); - Assert.AreEqual("Error message for member Member6 = Error getting value from 'Member6' on 'Newtonsoft.Json.Tests.TestObjects.SerializationEventTestObject'.", obj.Member5); + string json = JsonConvert.SerializeObject(obj, Formatting.Indented); + Assert.AreEqual(@"{ + ""Member1"": 11, + ""Member2"": ""This value went into the data file during serialization."", + ""Member4"": null + }", json); - JObject o = JObject.Parse(@"{ - ""Member1"": 11, - ""Member2"": ""This value went into the data file during serialization."", - ""Member4"": null -}"); - o["Member6"] = "Dummy text for error"; + Assert.AreEqual(11, obj.Member1); + Assert.AreEqual("This value was reset after serialization.", obj.Member2); + Assert.AreEqual("This is a nonserialized value", obj.Member3); + Assert.AreEqual(null, obj.Member4); - obj = JsonConvert.DeserializeObject(o.ToString()); + string expectedError = String.Format("Error message for member Member6 = Error getting value from 'Member6' on '{0}'.", obj.GetType().FullName); + Assert.AreEqual(expectedError, obj.Member5); - Assert.AreEqual(11, obj.Member1); - Assert.AreEqual("This value went into the data file during serialization.", obj.Member2); - Assert.AreEqual("This value was set during deserialization", obj.Member3); - Assert.AreEqual("This value was set after deserialization.", obj.Member4); - Assert.AreEqual("Error message for member Member6 = Error setting value to 'Member6' on 'Newtonsoft.Json.Tests.TestObjects.SerializationEventTestObject'.", obj.Member5); + JObject o = JObject.Parse(@"{ + ""Member1"": 11, + ""Member2"": ""This value went into the data file during serialization."", + ""Member4"": null + }"); + o["Member6"] = "Dummy text for error"; + + obj = (SerializationEventTestObject) JsonConvert.DeserializeObject(o.ToString(), obj.GetType()); + + Assert.AreEqual(11, obj.Member1); + Assert.AreEqual("This value went into the data file during serialization.", obj.Member2); + Assert.AreEqual("This value was set during deserialization", obj.Member3); + Assert.AreEqual("This value was set after deserialization.", obj.Member4); + + expectedError = String.Format("Error message for member Member6 = Error setting value to 'Member6' on '{0}'.", obj.GetType()); + Assert.AreEqual(expectedError, obj.Member5); + + DerivedSerializationEventTestObject derivedObj = obj as DerivedSerializationEventTestObject; + if (derivedObj != null) Assert.AreEqual("This value was set after deserialization.", derivedObj.Member7); + } } [Test] @@ -335,4 +347,4 @@ namespace Newtonsoft.Json.Tests.Serialization } } } -} \ No newline at end of file +} diff --git a/Src/Newtonsoft.Json.Tests/TestObjects/SerializationEventTestObject.cs b/Src/Newtonsoft.Json.Tests/TestObjects/SerializationEventTestObject.cs index 3965447f..b77e05b4 100644 --- a/Src/Newtonsoft.Json.Tests/TestObjects/SerializationEventTestObject.cs +++ b/Src/Newtonsoft.Json.Tests/TestObjects/SerializationEventTestObject.cs @@ -96,4 +96,40 @@ namespace Newtonsoft.Json.Tests.TestObjects errorContext.Handled = true; } } -} \ No newline at end of file + + public class DerivedSerializationEventTestObject : SerializationEventTestObject + { + // This field is set to null, but populated after deserialization, only + // in the derived class + [JsonIgnore] + public string Member7 { get; set; } + + // These empty methods exist to make sure we're not covering up the base + // methods + [OnSerializing] + internal void OnDerivedSerializingMethod(StreamingContext context) + { + } + + [OnSerialized] + internal void OnDerivedSerializedMethod(StreamingContext context) + { + } + + [OnDeserializing] + internal void OnDerivedDeserializingMethod(StreamingContext context) + { + } + + [OnDeserialized] + internal void OnDerivedDeserializedMethod(StreamingContext context) + { + Member7 = "This value was set after deserialization."; + } + + [OnError] + internal void OnDerivedErrorMethod(StreamingContext context, ErrorContext errorContext) + { + } + } +}