/// <summary> /// Deserialize a model from JSON. /// </summary> /// <param name="json">The JSON representing the model.</param> /// <param name="errors">A collection of deserialization errors.</param> public static Model FromJson(string json, List <string> errors = null) { // When user elements have been loaded into the app domain, they haven't always been // loaded into the InheritanceConverter's Cache. This does have some overhead, // but is useful here, at the Model level, to ensure user types are available. JsonInheritanceConverter.RefreshUserElementTypeCache(); errors = errors ?? new List <string>(); var model = Newtonsoft.Json.JsonConvert.DeserializeObject <Model>(json, new JsonSerializerSettings() { Error = (sender, args) => { errors.Add(args.ErrorContext.Error.Message); args.ErrorContext.Handled = true; } }); JsonInheritanceConverter.Elements.Clear(); return(model); }
public void When_deserializing_existing_property_is_populated_with_discriminator_value() { // Arrange var json = @" { ""PropertyA"":""ClassA"", ""PropertyB"":""v2"" }"; var jsonReader = new JsonTextReader(new StringReader(json)); // Act var obj = new JsonInheritanceConverter("PropertyA").ReadJson(jsonReader, typeof(BaseClass), null, DefaultSerializer); // Assert Assert.IsType <ClassA>(obj); var objA = (ClassA)obj; Assert.Equal("ClassA", objA.PropertyA); Assert.Equal("v2", objA.PropertyB); }