Stops requiring JsonIgnore properties with ItemRequired (#1302)

* Made JsonIgnore properties not required when using ItemRequired.

* Update JsonSerializerInternalReader.cs

* Update JsonSerializerInternalReader.cs

* Update JsonSerializerInternalReader.cs

* Remove end of file newline
This commit is contained in:
Tyler Brinkley
2017-05-03 20:37:51 +12:00
committed by James Newton-King
parent 92653ae3f2
commit b6363c70e6
2 changed files with 38 additions and 1 deletions
@@ -1761,5 +1761,42 @@ namespace Newtonsoft.Json.Tests
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
}
[Test]
public void ShouldNotRequireIgnoredPropertiesWithItemsRequired()
{
string json = @"{
""exp"": 1483228800,
""active"": true
}";
ItemsRequiredObjectWithIgnoredProperty value = JsonConvert.DeserializeObject<ItemsRequiredObjectWithIgnoredProperty>(json);
Assert.IsNotNull(value);
Assert.AreEqual(value.Expiration, new DateTime(2017, 1, 1, 0, 0, 0, DateTimeKind.Utc));
Assert.AreEqual(value.Active, true);
}
[JsonObject(ItemRequired = Required.Always)]
public sealed class ItemsRequiredObjectWithIgnoredProperty
{
private static readonly DateTime s_unixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
[JsonProperty("exp")]
private int _expiration
{
get
{
return (int)((Expiration - s_unixEpoch).TotalSeconds);
}
set
{
Expiration = s_unixEpoch.AddSeconds(value);
}
}
public bool Active { get; set; }
[JsonIgnore]
public DateTime Expiration { get; set; }
}
}
}
@@ -2523,7 +2523,7 @@ namespace Newtonsoft.Json.Serialization
{
try
{
Required resolvedRequired = property._required ?? contract.ItemRequired ?? Required.Default;
Required resolvedRequired = property.Ignored ? Required.Default : property._required ?? contract.ItemRequired ?? Required.Default;
switch (presence)
{