From 064cfafa915b6a2a855e030310c0bad00eae3de8 Mon Sep 17 00:00:00 2001 From: James Newton-King Date: Sat, 30 Mar 2019 18:04:21 +1300 Subject: [PATCH] Add JsonProperty.IsRequiredSpecified (#2027) --- .../Serialization/ContractResolverTests.cs | 31 +++++++++++++++++++ .../Serialization/JsonProperty.cs | 5 +++ 2 files changed, 36 insertions(+) diff --git a/Src/Newtonsoft.Json.Tests/Serialization/ContractResolverTests.cs b/Src/Newtonsoft.Json.Tests/Serialization/ContractResolverTests.cs index d34b6cfe..2756ad40 100644 --- a/Src/Newtonsoft.Json.Tests/Serialization/ContractResolverTests.cs +++ b/Src/Newtonsoft.Json.Tests/Serialization/ContractResolverTests.cs @@ -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); + } } } \ No newline at end of file diff --git a/Src/Newtonsoft.Json/Serialization/JsonProperty.cs b/Src/Newtonsoft.Json/Serialization/JsonProperty.cs index 1c9b727c..38fe8516 100644 --- a/Src/Newtonsoft.Json/Serialization/JsonProperty.cs +++ b/Src/Newtonsoft.Json/Serialization/JsonProperty.cs @@ -201,6 +201,11 @@ namespace Newtonsoft.Json.Serialization set => _required = value; } + /// + /// Gets a value indicating whether has a value specified. + /// + public bool IsRequiredSpecified => _required != null; + /// /// Gets or sets a value indicating whether this property preserves object references. ///