https://stackoverflow.com/questions/66787969

CSharp · Console

/Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using Newtonsoft.Json;
					
public class Program
{
	public static void Main()
	{
		Console.WriteLine("--- Instances list is not in JSON ---");
		DeserializeAndDump("{}");

		Console.WriteLine("--- Instances list is null ---");
		DeserializeAndDump(@"{ ""Instances"": null }");

		Console.WriteLine("--- Instances list is empty ---");
		DeserializeAndDump(@"{ ""Instances"": [] }");

		Console.WriteLine("--- Instances list has an item ---");
		DeserializeAndDump(@"{ ""Instances"": [ { ""Name"": ""ABC"", ""MyProperty"": 4 } ] }");
	}
	
	static void DeserializeAndDump(string json)
	{
		var dataSettings = JsonConvert.DeserializeObject<DataSettings>(json);
		
		foreach (var instance in dataSettings.Instances)
		{
			Console.WriteLine($"Name: {instance.Name}, MyProperty: {instance.MyProperty}");
		}
		
		Console.WriteLine();
	}
}

public class DataSettings
{
	public DataSettings()
	{
		Instances = new List<Instance>();
	}

	public List<Instance> Instances { get; set; }

	[OnDeserialized]
	internal void SetDefaultValuesAfterDeserialization(StreamingContext context)
	{
		if (Instances == null || !Instances.Any())
		{
			Instances = new List<Instance>
			{
				new Instance { Name = "XYZ", MyProperty = 11 }
			};
		}
	}
}

public class Instance
{
	public string Name { get; set; }
	public int MyProperty { get; set; }
}

;