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.
///