Тема: Як написати парсер для JSON ?
Прів. Тут така справа, що в мене є JSON-файл, котрий потрібно завантажити і створити з нього купку об'єктів. І от так виходить, що жоден з існуючих плагінів не підходить мені для десереалізації, тому що проект створюється в одній прозі, потім переноситься на іншу платформу, і вже знову збирається в іншій прозі під іншу платформу. 
Так от я і вирішив, що якщо це мені потрібно конкретно під мою задачу і конкретно під мій JSON-файл, то чому б і не написати свого десереалізатора?
Ну то я щось почав-почав, а потім щось застряг-застряг, і ніяка думка в голову не лізе. 
ШО РОБИТИ???
using UnityEngine;
using System.Collections.Generic;
public enum State
{
    OpenedChapter,
    OpenedPage,
    None
}
public class MyJsonParser {
    public State state = State.None;
    List<ChapterModel> Parse(string json)
    {
        List<ChapterModel> result = new List<ChapterModel>();
        ChapterModel chapter;
        PageModel page;
        for(int i = 0; i<json.Length; i++)
        {
            char ch = json[i];
            switch(state)
            {
                case State.None:
                    if(ch=='{' && state==State.None)
                    {
                        state = State.OpenedChapter;
                        chapter = new ChapterModel();
                    }
                    if(ch=='"' && state==State.OpenedChapter)
                    {
                        if (json[i + 1] =='p')
                    }
                    break;
                case State.OpenedChapter:
                    break;
                case State.OpenedPage:
                    break;
            }
        }
        return result;
    }
}роблю під конкретно от таку штуку 
[
  {
    "id": 1,
    "pages": [
      {
        "BackgroundArt": "pg1pt01.jpg",
        "ForeAddedArt": "pg1pt02.png",
        "VFXloop": "desert storm between BGArt and FArt",
        "VFXappeared": "from fade to screen (1s)",
        "VFXnextSlide": "fade to black (1s)",
        "BGAmbientLoop": null,
        "BGMusicLoop": "music_titles.mp3",
        "BGVoiceLoop": null,
        "VFXSound": null,
        "MusicSound": null,
        "VoiceSound": null
      },
      {
        "BackgroundArt": "pg2pt01.jpg",
        "ForeAddedArt": null,
        "VFXloop": "desert storm",
        "VFXappeared": "from fade to screen (1s)",
        "VFXnextSlide": null,
        "BGAmbientLoop": "amb_storm.mp3",
        "BGMusicLoop": null,
        "BGVoiceLoop": null,
        "VFXSound": "shuttle_flight_passby.mp3",
        "MusicSound": null,
        "VoiceSound": null
      }
    ]
  },
  {
    "id": 2,
    "pages": [
      {
        "BackgroundArt": "pg11pt01.jpg",
        "ForeAddedArt": null,
        "VFXloop": null,
        "VFXappeared": "from fade to screen (1s)",
        "VFXnextSlide": null,
        "BGAmbientLoop": "amb_storm_outside_engine_inside.mp3",
        "BGMusicLoop": null,
        "BGVoiceLoop": null,
        "VFXSound": null,
        "MusicSound": null,
        "VoiceSound": null
      },
      {
        "BackgroundArt": "previous kept",
        "ForeAddedArt": "pg12pt01.png",
        "VFXloop": null,
        "VFXappeared": null,
        "VFXnextSlide": "fade to black (1s)",
        "BGAmbientLoop": "previous kept",
        "BGMusicLoop": null,
        "BGVoiceLoop": null,
        "VFXSound": null,
        "MusicSound": null,
        "VoiceSound": "pilot002.mp3"
      }
    ]
  }
]

