Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/dotnet/runtime.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/libraries/System.Text.Json/tests/Serialization/PropertyVisibilityTests.cs')
-rw-r--r--src/libraries/System.Text.Json/tests/Serialization/PropertyVisibilityTests.cs112
1 files changed, 112 insertions, 0 deletions
diff --git a/src/libraries/System.Text.Json/tests/Serialization/PropertyVisibilityTests.cs b/src/libraries/System.Text.Json/tests/Serialization/PropertyVisibilityTests.cs
index 2cc311764cb..69ce86512cc 100644
--- a/src/libraries/System.Text.Json/tests/Serialization/PropertyVisibilityTests.cs
+++ b/src/libraries/System.Text.Json/tests/Serialization/PropertyVisibilityTests.cs
@@ -327,6 +327,39 @@ namespace System.Text.Json.Serialization.Tests
() => JsonSerializer.Deserialize<ClassTwiceInheritedWithPropertyPolicyConflictWhichThrows>(json, options));
}
+ [Fact]
+ public static void HiddenPropertiesIgnored_WhenOverridesIgnored_AndPropertyNameConflicts()
+ {
+ string serialized = JsonSerializer.Serialize(new DerivedClass_With_IgnoredOverride());
+ Assert.Equal(@"{""MyProp"":false}", serialized);
+
+ serialized = JsonSerializer.Serialize(new DerivedClass_With_IgnoredOverride_And_ConflictingPropertyName());
+ Assert.Equal(@"{""MyProp"":null}", serialized);
+
+ serialized = JsonSerializer.Serialize(new DerivedClass_With_NewProperty());
+ Assert.Equal(@"{""MyProp"":false}", serialized);
+
+ serialized = JsonSerializer.Serialize(new DerivedClass_With_NewProperty_And_ConflictingPropertyName());
+ Assert.Equal(@"{""MyProp"":null}", serialized);
+
+ serialized = JsonSerializer.Serialize(new DerivedClass_WithNewProperty_Of_DifferentType());
+ Assert.Equal(@"{""MyProp"":false}", serialized);
+
+ serialized = JsonSerializer.Serialize(new DerivedClass_WithNewProperty_Of_DifferentType_And_ConflictingPropertyName());
+ Assert.Equal(@"{""MyProp"":null}", serialized);
+
+ serialized = JsonSerializer.Serialize(new DerivedClass_WithIgnoredOverride());
+ Assert.Equal(@"{""MyProp"":false}", serialized);
+
+ serialized = JsonSerializer.Serialize(new FurtherDerivedClass_With_ConflictingPropertyName());
+ Assert.Equal(@"{""MyProp"":null}", serialized);
+
+ Assert.Throws<InvalidOperationException>(() => JsonSerializer.Serialize(new DerivedClass_WithConflictingPropertyName()));
+
+ serialized = JsonSerializer.Serialize(new FurtherDerivedClass_With_IgnoredOverride());
+ Assert.Equal(@"{""MyProp"":null}", serialized);
+ }
+
public class ClassWithInternalProperty
{
internal string MyString { get; set; } = "DefaultValue";
@@ -474,6 +507,85 @@ namespace System.Text.Json.Serialization.Tests
public new decimal MyNumeric { get; set; } = 1.5M;
}
+ private class Class_With_VirtualProperty
+ {
+ public virtual bool MyProp { get; set; }
+ }
+
+ private class DerivedClass_With_IgnoredOverride : Class_With_VirtualProperty
+ {
+ [JsonIgnore]
+ public override bool MyProp { get; set; }
+ }
+
+ private class DerivedClass_With_IgnoredOverride_And_ConflictingPropertyName : Class_With_VirtualProperty
+ {
+ [JsonPropertyName("MyProp")]
+ public string MyString { get; set; }
+
+ [JsonIgnore]
+ public override bool MyProp { get; set; }
+ }
+
+ private class Class_With_Property
+ {
+ public bool MyProp { get; set; }
+ }
+
+ private class DerivedClass_With_NewProperty : Class_With_Property
+ {
+ [JsonIgnore]
+ public new bool MyProp { get; set; }
+ }
+
+ private class DerivedClass_With_NewProperty_And_ConflictingPropertyName : Class_With_Property
+ {
+ [JsonPropertyName("MyProp")]
+ public string MyString { get; set; }
+
+ [JsonIgnore]
+ public new bool MyProp { get; set; }
+ }
+
+ private class DerivedClass_WithNewProperty_Of_DifferentType : Class_With_Property
+ {
+ [JsonIgnore]
+ public new int MyProp { get; set; }
+ }
+
+ private class DerivedClass_WithNewProperty_Of_DifferentType_And_ConflictingPropertyName : Class_With_Property
+ {
+ [JsonPropertyName("MyProp")]
+ public string MyString { get; set; }
+
+ [JsonIgnore]
+ public new int MyProp { get; set; }
+ }
+
+ private class DerivedClass_WithIgnoredOverride : Class_With_VirtualProperty
+ {
+ [JsonIgnore]
+ public override bool MyProp { get; set; }
+ }
+
+ private class FurtherDerivedClass_With_ConflictingPropertyName : DerivedClass_WithIgnoredOverride
+ {
+ [JsonPropertyName("MyProp")]
+ public string MyString { get; set; }
+ }
+
+ private class DerivedClass_WithConflictingPropertyName : Class_With_VirtualProperty
+ {
+ [JsonPropertyName("MyProp")]
+ public string MyString { get; set; }
+ }
+
+ private class FurtherDerivedClass_With_IgnoredOverride : DerivedClass_WithConflictingPropertyName
+ {
+ [JsonIgnore]
+ public override bool MyProp { get; set; }
+ }
+
[Fact]
public static void NoSetter()
{