Unity Serialization problem

I want to serialize this class:

[System.Serializable]
public class Skill {
    public string name;
    public int price;
    public delegate void onValueChanged();
    //public Sprite sprite;
    public onValueChanged trigger;
    [Multiline]
    public string description;

    public Skill() { }
    public Skill(string Name, int Price, onValueChanged Trigger, string Description) {
        name = Name;
        price = Price;
        trigger = Trigger;
        description = Description;
    }

    public virtual bool CanBuySkillSlot(int price) {
        return (SkillTree.i.Tokens >= price) ? true : false;
    }

    public virtual void Buy() {

    }

    public virtual void Sell() {

    }

    public virtual void Remove() {

    }
}

This class is used by many MonoBehavior scripts as data classes :

(UpgradePanel.cs)
public Skill skill;

	public void Load(Sprite sprite, Skill skill){
		abilityName.text = skill.name;
		icons [0].sprite = sprite;
		icons [1].sprite = sprite;

		description.text = skill.description;
...

But when I try to serialize the a Skill list it writes :

SerializationException: Type UpgradePanel is not marked as Serializable.

The thing is that I use many times Skill into UpgradePanel but I never reference (inside Skill) any part of Upgrade panel… why?

From what I am seeing on the Unity Docs you need to add the System.Object to it for Serializable to work. For example:

Public Class myClass : System.Object {
    //My Code
}

Here’s where I got the information: Unity - Scripting API: Serializable