using System.Collections;
using System.Collections.Generic;
using System.Runtime.Serialization;
public class Level : BaseEntity
public class EntityList<T> where T : BaseEntity
public interface IRepository<T>
IEnumerable<T> GetEntities();
public class Repository<T> : IRepository<T> where T : BaseEntity
public readonly string FileName;
public Repository(string fileName)
public void Add(T entity)
string json = PlayerPrefs.GetString(FileName);
var entities = JsonUtility.FromJson<EntityList<T>>(json);
entities.Entities.Add(entity);
public void Remove(T entity)
var json = PlayerPrefs.GetString(FileName);
var entities = JsonUtility.FromJson<EntityList<T>>(json);
entities.Entities.Remove(entity);
private void Save(EntityList<T> entities)
var json = JsonUtility.ToJson(entities);
PlayerPrefs.SetString(FileName, json);
public IEnumerable<T> GetEntities()
var json = PlayerPrefs.GetString(FileName);
var entities = JsonUtility.FromJson<EntityList<T>>(json);
return entities.Entities;
var json = PlayerPrefs.GetString(FileName);
var entityList = JsonUtility.FromJson<EntityList<T>>(json);
return entityList.Entities.Find(entity => entity.ID == id);
IRepository<Level> repository = new Repository<Level>("Levels");
repository.Add(new Level()