title: ScriptableObject does not show up in Inspector when Unity is closed and then reopened
body: <p>Like title,I didn't create a custom inspector for ScriptableObject,and I googled, most of the answers are using SetDirty(object) but it did't work.When I modify any of the code in the project and Unity will refactor the C# code, some of the ScriptableObjects will be displayed in the Inspector panel,not all SOs are displayed but partially displayed，I checked these displayed SOs,data is not lost;When I reopen the project again,and then click SO in Project panel,Inspector panel has nothing;
  <a href="https://i.stack.imgur.com/wO5zN.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/wO5zN.png" alt="enter image description here"></a>
  <a href="https://i.stack.imgur.com/qZ4dr.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/qZ4dr.png" alt="enter image description here"></a></p>
  
  <p>as you can see, MouseModuleData is not display which is created from last time i opened Unity，MouseModuleData1 is created from this time;So I think if there is a problem with my data structure.</p>
  
  <pre><code>/// &lt;summary&gt;
  /// Base Class of Module Data
  /// &lt;/summary&gt;
  public abstract class PitchModuleBaseData : ScriptableObject, IEnumerable
  {
      public abstract IEnumerator GetEnumerator();
  }
  
  /// &lt;summary&gt;
  /// Face Module Data
  /// &lt;/summary&gt;
  [System.Serializable, CreateAssetMenu(fileName = "MouseModuleData", menuName = "AvatarData/MouseModuleData")]
  public class MouthModuleData : PitchModuleBaseData
  {
      public BoneData MouthCornerLeft;
      public BoneData MouthCornerRight;
      public BoneData LeapUp;
      public BoneData LeapMiddle;
      public BoneData LeapDown;
      public BoneData MouseRoot;
  
      public MouthModuleData()
      {
          MouthCornerLeft = new BoneData(PitchFaceConst.Mouth_CornerL, PitchFaceConst.Mouth_CornerR);
          MouthCornerRight = new BoneData(PitchFaceConst.Mouth_CornerR, PitchFaceConst.Mouth_CornerL);
          LeapDown = new BoneData(PitchFaceConst.Mouth_LeapDown);
          LeapMiddle = new BoneData(PitchFaceConst.Mouth_LeapMiddle);
          LeapUp = new BoneData(PitchFaceConst.Mouth_LeapUp);
          MouseRoot = new BoneData(PitchFaceConst.Mouth_Root);
      }
  
      public override IEnumerator GetEnumerator()
      {
          BoneData[] arr = new BoneData[6];
          arr[0] = MouthCornerLeft;
          arr[1] = MouthCornerRight;
          arr[2] = LeapUp;
          arr[3] = LeapDown;
          arr[4] = MouseRoot;
          arr[5] = LeapMiddle;
          return new DataEnumerator(arr);
      }
  }
  </code></pre>
  
  <p>So I did a test; I created a data like the one above.</p>
  
  <pre><code> public abstract class ABData : ScriptableObject, IEnumerable
  {
      public abstract IEnumerator GetEnumerator();
  }
  
  [System.Serializable, CreateAssetMenu(fileName = "TestData", menuName = "Create/TestData")]
  public class TestData : ABData
  {
      public TestData()
      {
          data = new BoneData();
          Middle = new BoneData(PitchFaceConst.Eye_Mid);
          Left = new BoneData(PitchFaceConst.Eye_Left, PitchFaceConst.Eye_Right);
          Right = new BoneData(PitchFaceConst.Eye_Right, PitchFaceConst.Eye_Left);
          EyeLeft1 = new BoneData(PitchFaceConst.Eye_L1, PitchFaceConst.Eye_R1);
          EyeLeft2 = new BoneData(PitchFaceConst.Eye_L2, PitchFaceConst.Eye_R2);
          EyeLeft3 = new BoneData(PitchFaceConst.Eye_L3, PitchFaceConst.Eye_R3);
          EyeLeft4 = new BoneData(PitchFaceConst.Eye_L4, PitchFaceConst.Eye_R4);
          EyeRight1 = new BoneData(PitchFaceConst.Eye_R1, PitchFaceConst.Eye_L1);
          EyeRight2 = new BoneData(PitchFaceConst.Eye_R2, PitchFaceConst.Eye_L2);
          EyeRight3 = new BoneData(PitchFaceConst.Eye_R3, PitchFaceConst.Eye_L3);
          EyeRight4 = new BoneData(PitchFaceConst.Eye_R4, PitchFaceConst.Eye_L4);
      }
  
      public BoneData data;
  
      public BoneData Middle;
      public BoneData Left;
      public BoneData Right;
  
      public BoneData EyeLeft1;
      public BoneData EyeLeft2;
      public BoneData EyeLeft3;
      public BoneData EyeLeft4;
  
      public BoneData EyeRight1;
      public BoneData EyeRight2;
      public BoneData EyeRight3;
      public BoneData EyeRight4;
  
      public override IEnumerator GetEnumerator()
      {
          throw new System.NotImplementedException();
      }
  }
  </code></pre>
  
  <p>Then let me go crazy, something happened.TheTestData is Showed as normal Whether it is reopened or not, it works just like a normal OS.</p>
  
  <p><a href="https://i.stack.imgur.com/RQA5H.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/RQA5H.png" alt="enter image description here"></a></p>
  
  <p>Please help me, let me get on the right track.</p>