Could not create an instance of type <T>

Hi everbody,

I try to define my config file with list of IAction, but i have this error in my console :

Could not initialize plugin 'Actions v0.1.0' (JsonSerializationException: Could not create an instance of type Oxide.Plugins.Actions+IAction. Type is an interface or abstract class and cannot be instantiated. Path '['Define your actions schedules'].Monday[0]['Start time noclip']', line 5, position 32.)
        #region Config

        private ConfigData _configData;

        class ConfigData
        {
            [JsonProperty(PropertyName = "Define your actions schedule")]
            public SchedulesOption Schedules { get; set; }

            public class SchedulesOption
            {
                [JsonProperty(PropertyName = "Monday")]
                public List<IAction> Monday { get; set; }
            }

        }

        protected override void LoadConfig()
        {
            base.LoadConfig();
            _configData = Config.ReadObject<ConfigData>();

            Config.WriteObject(_configData, true);
        }

        protected override void LoadDefaultConfig() => _configData = GetBaseConfig();
        protected override void SaveConfig() => Config.WriteObject(_configData, true);

        private ConfigData GetBaseConfig()
        {
            return new ConfigData
            {
                Schedules = new ConfigData.SchedulesOption
                {
                    Monday = new List<IAction>()
                    {
                        new ActionNoclipStart("15:00:00"),
                        new ActionNoclipEnd("17:00:00"),
                        new ActionNoclipStart("20:00:00"),
                        new ActionNoclipEnd("22:00:00")
                    }

                }
            };
        }

        public interface IAction
        {
        }

        public class ActionNoclipStart : IAction
        {
            public ActionStart(string timeValue)
            {
                StartTimeNoclip = timeValue;
            }

            [JsonProperty(PropertyName = "Start time noclip")]
            public string StartTimeNoclip { get; set; }
        }

        public class ActionNoclipEnd : IAction
        {
            public ActionEnd(string timeValue)
            {
                EndTimeNoclip = timeValue;
            }

            [JsonProperty(PropertyName = "End time noclip")]
            public string EndTimeNoclip { get; set; }
        }

        #endregion

I don't understand how I can stop having this error.

Thanks for help :).

Type is an interface or abstract class and cannot be instantiated


so u cannot make a list of IAction in json

Yes I understand but I want list of IAction :/. It’s possible to override serializer and deserialize for this work ?

Edit : Explicit error

Could not initialize plugin 'Actions v0.1.0' (JsonSerializationException: Could not create an instance of type Oxide.Plugins.Actions+IAction. Type is an interface or abstract class and cannot be instantiated. Path '['Define your actions schedule'].Monday[0]['Start time noclip']', line 5, position 32.)
  at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateNewObject (Newtonsoft.Json.JsonReader reader, Newtonsoft.Json.Serialization.JsonObjectContract objectContract, Newtonsoft.Json.Serialization.JsonProperty containerMember, Newtonsoft.Json.Serialization.JsonProperty containerProperty, System.String id, System.Boolean& createdFromNonDefaultCreator) [0x000ba] in <8fe7f8665ff548909c2f26d557e5093a>:0
  at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject (Newtonsoft.Json.JsonReader reader, System.Type objectType, Newtonsoft.Json.Serialization.JsonContract contract, Newtonsoft.Json.Serialization.JsonProperty member, Newtonsoft.Json.Serialization.JsonContainerContract containerContract, Newtonsoft.Json.Serialization.JsonProperty containerMember, System.Object existingValue) [0x00143] in <8fe7f8665ff548909c2f26d557e5093a>:0
  at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal (Newtonsoft.Json.JsonReader reader, System.Type objectType, Newtonsoft.Json.Serialization.JsonContract contract, Newtonsoft.Json.Serialization.JsonProperty member, Newtonsoft.Json.Serialization.JsonContainerContract containerContract, Newtonsoft.Json.Serialization.JsonProperty containerMember, System.Object existingValue) [0x0006d] in <8fe7f8665ff548909c2f26d557e5093a>:0
  at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateList (System.Collections.IList list, Newtonsoft.Json.JsonReader reader, Newtonsoft.Json.Serialization.JsonArrayContract contract, Newtonsoft.Json.Serialization.JsonProperty containerProperty, System.String id) [0x0016f] in <8fe7f8665ff548909c2f26d557e5093a>:0
  at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateList (Newtonsoft.Json.JsonReader reader, System.Type objectType, Newtonsoft.Json.Serialization.JsonContract contract, Newtonsoft.Json.Serialization.JsonProperty member, System.Object existingValue, System.String id) [0x000dc] in <8fe7f8665ff548909c2f26d557e5093a>:0
  at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal (Newtonsoft.Json.JsonReader reader, System.Type objectType, Newtonsoft.Json.Serialization.JsonContract contract, Newtonsoft.Json.Serialization.JsonProperty member, Newtonsoft.Json.Serialization.JsonContainerContract containerContract, Newtonsoft.Json.Serialization.JsonProperty containerMember, System.Object existingValue) [0x0007f] in <8fe7f8665ff548909c2f26d557e5093a>:0
  at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.SetPropertyValue (Newtonsoft.Json.Serialization.JsonProperty property, Newtonsoft.Json.JsonConverter propertyConverter, Newtonsoft.Json.Serialization.JsonContainerContract containerContract, Newtonsoft.Json.Serialization.JsonProperty containerProperty, Newtonsoft.Json.JsonReader reader, System.Object target) [0x00061] in <8fe7f8665ff548909c2f26d557e5093a>:0
  at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject (System.Object newObject, Newtonsoft.Json.JsonReader reader, Newtonsoft.Json.Serialization.JsonObjectContract contract, Newtonsoft.Json.Serialization.JsonProperty member, System.String id) [0x00267] in <8fe7f8665ff548909c2f26d557e5093a>:0
  at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject (Newtonsoft.Json.JsonReader reader, System.Type objectType, Newtonsoft.Json.Serialization.JsonContract contract, Newtonsoft.Json.Serialization.JsonProperty member, Newtonsoft.Json.Serialization.JsonContainerContract containerContract, Newtonsoft.Json.Serialization.JsonProperty containerMember, System.Object existingValue) [0x0015c] in <8fe7f8665ff548909c2f26d557e5093a>:0
  at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal (Newtonsoft.Json.JsonReader reader, System.Type objectType, Newtonsoft.Json.Serialization.JsonContract contract, Newtonsoft.Json.Serialization.JsonProperty member, Newtonsoft.Json.Serialization.JsonContainerContract containerContract, Newtonsoft.Json.Serialization.JsonProperty containerMember, System.Object existingValue) [0x0006d] in <8fe7f8665ff548909c2f26d557e5093a>:0
  at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.SetPropertyValue (Newtonsoft.Json.Serialization.JsonProperty property, Newtonsoft.Json.JsonConverter propertyConverter, Newtonsoft.Json.Serialization.JsonContainerContract containerContract, Newtonsoft.Json.Serialization.JsonProperty containerProperty, Newtonsoft.Json.JsonReader reader, System.Object target) [0x00061] in <8fe7f8665ff548909c2f26d557e5093a>:0
  at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject (System.Object newObject, Newtonsoft.Json.JsonReader reader, Newtonsoft.Json.Serialization.JsonObjectContract contract, Newtonsoft.Json.Serialization.JsonProperty member, System.String id) [0x00267] in <8fe7f8665ff548909c2f26d557e5093a>:0
  at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject (Newtonsoft.Json.JsonReader reader, System.Type objectType, Newtonsoft.Json.Serialization.JsonContract contract, Newtonsoft.Json.Serialization.JsonProperty member, Newtonsoft.Json.Serialization.JsonContainerContract containerContract, Newtonsoft.Json.Serialization.JsonProperty containerMember, System.Object existingValue) [0x0015c] in <8fe7f8665ff548909c2f26d557e5093a>:0
  at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal (Newtonsoft.Json.JsonReader reader, System.Type objectType, Newtonsoft.Json.Serialization.JsonContract contract, Newtonsoft.Json.Serialization.JsonProperty member, Newtonsoft.Json.Serialization.JsonContainerContract containerContract, Newtonsoft.Json.Serialization.JsonProperty containerMember, System.Object existingValue) [0x0006d] in <8fe7f8665ff548909c2f26d557e5093a>:0
  at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize (Newtonsoft.Json.JsonReader reader, System.Type objectType, System.Boolean checkAdditionalContent) [0x000d9] in <8fe7f8665ff548909c2f26d557e5093a>:0
  at Newtonsoft.Json.JsonSerializer.DeserializeInternal (Newtonsoft.Json.JsonReader reader, System.Type objectType) [0x00053] in <8fe7f8665ff548909c2f26d557e5093a>:0
  at Newtonsoft.Json.JsonSerializer.Deserialize (Newtonsoft.Json.JsonReader reader, System.Type objectType) [0x00000] in <8fe7f8665ff548909c2f26d557e5093a>:0
  at Newtonsoft.Json.JsonConvert.DeserializeObject (System.String value, System.Type type, Newtonsoft.Json.JsonSerializerSettings settings) [0x0002d] in <8fe7f8665ff548909c2f26d557e5093a>:0
  at Newtonsoft.Json.JsonConvert.DeserializeObject[T] (System.String value, Newtonsoft.Json.JsonSerializerSettings settings) [0x00000] in <8fe7f8665ff548909c2f26d557e5093a>:0
  at Oxide.Core.Configuration.DynamicConfigFile.ReadObject[T] (System.String filename) [0x00028] in <4452f821def6406d834e4149849fe7ea>:0
  at Oxide.Plugins.Actions.LoadConfig () [0x0000d] in <06502173b88d440cbbbfba90eb906d2c>:0
  at Oxide.Core.Plugins.Plugin.HandleAddedToManager (Oxide.Core.Plugins.PluginManager manager) [0x0000f] in <4452f821def6406d834e4149849fe7ea>:0
  at Oxide.Core.Plugins.CSPlugin.HandleAddedToManager (Oxide.Core.Plugins.PluginManager manager) [0x00000] in <4452f821def6406d834e4149849fe7ea>:0
  at Oxide.Plugins.CSharpPlugin.HandleAddedToManager (Oxide.Core.Plugins.PluginManager manager) [0x00000] in <9affce1cd15c4ec183941adef8db1722>:0
  at Oxide.Plugins.RustPlugin.HandleAddedToManager (Oxide.Core.Plugins.PluginManager manager) [0x0028e] in <a9f358e251f64d70a70a0af42bd6c57f>:0
  at Oxide.Core.Plugins.PluginManager.AddPlugin (Oxide.Core.Plugins.Plugin plugin) [0x00027] in <4452f821def6406d834e4149849fe7ea>:0
  at Oxide.Core.OxideMod.PluginLoaded (Oxide.Core.Plugins.Plugin plugin) [0x00035] in <4452f821def6406d834e4149849fe7ea>:0
Why can't we define the type with its JsonProperty?
Please help me I don't understand why I can't define the type of my object with its field? If my fields are unique, it shouldn't be a problem.

If you could direct me maybe a plugin that instantiates interfaces in its config file?

I found this but I don't really understand if I can implement it.

https://answers.unity.com/questions/783456/solution-how-to-serialize-interfaces-generics-auto.html

Edit : Json generated
{
  "Define your raiding schedule": {
    "Monday": [
      {
        "Start time noclip": "15:00:00"
      },
      {
        "End time noclip": "17:00:00"
      },
      {
        "Start time noclip": "20:00:00"
      },
      {
        "End time noclip": "22:00:00"
      }
    ]
  }
}​
There's really no solution? I found a lot of things on stackoverflow but I don't think I'm experienced enough to create my own converter and implement it. Could someone show me an example?