new_properties_tests

CSharp · Console

/Program.cs

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";
		}
	}
}
;