private string GetPath(Type recordType, RecordAttribute recordAttribute
                               , string recordName)
        {
            var    targetRootDirectory = GetTargetRecordRootDirectory(recordType, recordAttribute);
            string path;
            string fileRecordName = recordName;

            if (!recordName.IsValid() && recordAttribute.RecordNumberType !=
                RecordNumberType.Singleton)
            {
                var allPath = DirectoryUtility.GetAllDirectoryContainSelf(targetRootDirectory,
                                                                          p => p.EndsWith(".json") && !p.EndsWith("/.json"));
                if (allPath.Count != 0)
                {
                    var firstPath = allPath.First();
                    fileRecordName = FileUtility.GetFileIdWithoutExtension(firstPath);
                }
                else
                {
                    return(null);
                }
            }
            if (recordAttribute.RecordNumberType == RecordNumberType.Singleton)
            {
                path = targetRootDirectory + recordType.Name + ".json";
            }
            else
            {
                path = targetRootDirectory + fileRecordName + ".json";
            }
            return(path);
        }
        private object LoadRecordAtPath(string path, Type recordType,
                                        RecordAttribute recordAttribute)
        {
            if (path == null)
            {
                return(null);
            }
            object record;
            var    recordName = FileUtility.GetFileIdWithoutExtension(path);

            if (File.Exists(path))
            {
                var content = File.ReadAllText(path);
                record = JsonUtility.FromJson(content, recordType);
            }
            else
            {
                record = Activator.CreateInstance(recordType);
                if (recordAttribute.RecordNumberType == RecordNumberType.Singleton)
                {
                    singleRecords.Value.Add(recordType, record);
                }
                else
                {
                    ReflectionUtility.SetProperty(record,
                                                  "RecordName", recordName);
                }
                var content = YojoyEditorAgent.GetBeautifiedJson(JsonUtility.ToJson(record));
                FileUtility.WriteAllText(path, content);
            }
            return(record);
        }
        private string GetTargetRecordRootDirectory(Type recordType,
                                                    RecordAttribute recordAttribute)
        {
            var scopeString  = recordAttribute.RecordScopeType + "/";
            var parentString = recordAttribute.RecordNumberType == RecordNumberType.Singleton ?
                               null : recordType.Name + "/";
            var directory = recordRootDirectory + scopeString + parentString;

            return(directory);
        }