public void DataObject_XML_Serialization_Primitive(object value)
        {
            DataObject orig = DataObjectFactory.GetPropertyObjectFor("A", value);

            // create xml
            StringWriter sw     = new StringWriter();
            var          writer = new XmlTextWriter(sw);

            orig.WriteXml(writer);

            // deserialize xml
            DataObject deserialized = (DataObject)FormatterServices.GetUninitializedObject(orig.GetType());
            var        reader       = new XmlTextReader(new StringReader(sw.ToString()));

            reader.Read();
            deserialized.ReadXml(reader);

            // assert equal
            object origValue = orig.GetValue();
            object newValue  = deserialized.GetValue();

            if (origValue is DateTime o && newValue is DateTime n)
            {
                // check time and date separately,
                Assert.Equal(o.Date, n.Date);
                Assert.Equal(o.TimeOfDay.Hours, n.TimeOfDay.Hours);
                Assert.Equal(o.TimeOfDay.Minutes, n.TimeOfDay.Minutes);
                Assert.Equal(o.TimeOfDay.Seconds, n.TimeOfDay.Seconds);

                //not serializing milliseconds so do check that
            }
        public void DataObjectFactory_GetPropertyObjectFor_CreatesCorrectObject(string dataObjectType, Type valueType)
        {
            var    valueProvider = new DefaultValueProvider();
            object defaultValue  = valueProvider.GetValue(valueType);

            DataObject obj = DataObjectFactory.GetPropertyObjectFor("name", defaultValue);

            Assert.Equal(dataObjectType, obj.Type);
        }