Add JsonProperty.IsRequiredSpecified (#2027)

This commit is contained in:
James Newton-King
2019-03-30 18:04:21 +13:00
committed by GitHub
parent 34ff1a6728
commit 064cfafa91
2 changed files with 36 additions and 0 deletions
@@ -781,5 +781,36 @@ namespace Newtonsoft.Json.Tests.Serialization
Assert.AreEqual(null, property5.GetIsSpecified);
Assert.AreEqual(null, property5.SetIsSpecified);
}
[Test]
public void JsonRequiredAttribute()
{
DefaultContractResolver resolver = new DefaultContractResolver();
JsonObjectContract contract = (JsonObjectContract)resolver.ResolveContract(typeof(RequiredPropertyTestClass));
var property1 = contract.Properties["Name"];
Assert.AreEqual(Required.Always, property1.Required);
Assert.AreEqual(true, property1.IsRequiredSpecified);
}
[Test]
public void JsonPropertyAttribute_Required()
{
DefaultContractResolver resolver = new DefaultContractResolver();
JsonObjectContract contract = (JsonObjectContract)resolver.ResolveContract(typeof(RequiredObject));
var unset = contract.Properties["UnsetProperty"];
Assert.AreEqual(Required.Default, unset.Required);
Assert.AreEqual(false, unset.IsRequiredSpecified);
var allowNull = contract.Properties["AllowNullProperty"];
Assert.AreEqual(Required.AllowNull, allowNull.Required);
Assert.AreEqual(true, allowNull.IsRequiredSpecified);
}
}
}
@@ -201,6 +201,11 @@ namespace Newtonsoft.Json.Serialization
set => _required = value;
}
/// <summary>
/// Gets a value indicating whether <see cref="Required"/> has a value specified.
/// </summary>
public bool IsRequiredSpecified => _required != null;
/// <summary>
/// Gets or sets a value indicating whether this property preserves object references.
/// </summary>