CSharp · Console
using System;
using System.Collections.Generic;
using System.Text.Json;
using System.Text.Json.Serialization;
public class Program
{
public static void Main()
{
}
public static void NewDerivedPropertyIsNotPublic()
{
try
{
ClassBMemberPublic obj1 = JsonSerializer.Deserialize<ClassBMemberPublic>(@"{""SomeList"":[1,2]}");
} catch (InvalidOperationException e)
{
// Property name collision, since properties in both hierarchy levels are both public (expected).
Console.WriteLine(e.Message);
}
ClassBMemberPrivate obj2 = JsonSerializer.Deserialize<ClassBMemberPrivate>(@"{""SomeList"":[1,2]}");
Console.WriteLine(obj2.SomeList.Count == 0);
ClassBMemberInternal obj3 = JsonSerializer.Deserialize<ClassBMemberInternal>(@"{""SomeList"":[1,2]}");
Console.WriteLine(obj3.SomeList.GetType() );
Console.WriteLine(obj3.SomeList.Count == 0);
}
public static void NewDerivedPropertyIsNotPublic_AndParentPropertyIsIgnored()
{
}
public static void ParentClassIsNotPublic()
{
}
public static void ParentPropertyIsNotPublic_AndNewDerivedPropertyIsIgnored()
{
}
public void ConflictsDueToJsonPropertyName()
{
}
public void ConflictsDueToJsonPropertyName_WherePublicPropertyIsIgnored()
{
}
public void ConflictsDueToJsonNamingPolicy()
{
}
public void ConflictsDueToJsonNamingPolicy_WherePublicPropertyIsIgnored()
{
}
public class ClassAMemberPublic
{
public List<int> SomeList { get; } = new List<int>();
}
public class ClassBMemberPublic : ClassAMemberPublic
{
new public HashSet<int> SomeList { get; set; }
}
public class ClassBMemberPrivate : ClassAMemberPublic
{
new private HashSet<int> SomeList { get; set; }
}
public class ClassBMemberInternal : ClassAMemberPublic
{
new internal HashSet<int> SomeList { get; set; } = new HashSet<int>();
}
public class ClassPublicPrivate
{
public int A { get; set; }
[JsonPropertyName("A")]
private int B { get; set; }
}
public class ClassPublicInternal
{
public int A { get; set; }
[JsonPropertyName("A")]
internal int B { get; set; }
}
public class ClassPublicPublic
{
public int A { get; set; }
[JsonPropertyName("A")]
public int B { get; set; }
}
public class ClassInternalPrivate
{
internal int A { get; set; }
[JsonPropertyName("A")]
private int B { get; set; }
}
public class ClassPublicIgnoredPrivate
{
[JsonIgnore]
public int A { get; set; }
[JsonPropertyName("A")]
private int B { get; set; }
}
public class ClassPublicIgnoredInternal
{
[JsonIgnore]
public int A { get; set; }
[JsonPropertyName("A")]
internal int B { get; set; }
}
public class ClassPublicIgnoredPublic
{
[JsonIgnore]
public int A { get; set; }
[JsonPropertyName("A")]
public int B { get; set; }
}
public class ClassInternalIgnoredPrivate
{
[JsonIgnore]
internal int A { get; set; }
[JsonPropertyName("A")]
private int B { get; set; }
}
public class AllPropertiesMapToA : JsonNamingPolicy
{
public override string ConvertName(string name)
{
return "A";
}
}
}