public void ReadJson_IfJsonIsMissingAFieldStoresItAndContinuesDeserializing()
        {
            // Arrange
            string testField2Value = "testField2Value";
            bool?  testField3Value = true;

            string json = $"{{\"_stubField2\":\"{testField2Value}\",\"_stubField3\":{testField3Value.ToString().ToLowerInvariant()}}}";

            PrivateFieldsJsonConverter converter = new PrivateFieldsJsonConverter();

            // Act
            StubClass result = JsonConvert.DeserializeObject <StubClass>(json, converter);

            // Assert
            Assert.Equal(1, converter.MissingFields.Count);
            Assert.Equal("_stubField1", converter.MissingFields[0].Name);
            Assert.Equal(testField2Value, result.StubProperty2);
            Assert.Equal(testField3Value, result.StubProperty3);
        }
        public void ReadJson_IfJsonContainsAnExtraFieldStoresItAndContinuesDeserializing()
        {
            // Arrange
            int    testField1Value = 1;
            string testField2Value = "testField2Value";
            bool?  testField3Value = true;
            string extraFieldKey   = "extraFieldKey";
            string extraFieldValue = "extraFieldValue";

            string json = $"{{\"{extraFieldKey}\":\"{extraFieldValue}\",\"_stubField1\":{testField1Value},\"_stubField2\":\"{testField2Value}\",\"_stubField3\":{testField3Value.ToString().ToLowerInvariant()}}}";

            PrivateFieldsJsonConverter converter = new PrivateFieldsJsonConverter();

            // Act
            StubClass result = JsonConvert.DeserializeObject <StubClass>(json, converter);

            // Assert
            Assert.Equal(1, converter.ExtraFields.Count);
            Assert.Equal(extraFieldValue, (string)converter.ExtraFields[0].Value);
            Assert.Equal(testField1Value, result.StubProperty1);
            Assert.Equal(testField2Value, result.StubProperty2);
            Assert.Equal(testField3Value, result.StubProperty3);
        }