Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        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);
        }