public void Parse() { if (_IsParsed) return; var json = Encoding.UTF8.GetString(this.data); using (var strReader = new System.IO.StringReader(json)) { using (var r = new JsonTextReader(strReader)) { while (r.Read()) { if (r.TokenType == JsonToken.PropertyName) { switch (r.Value.ToString()) { #region Boolean case "OnlyOne": _OnlyOne = r.ReadInt32() != 0; break; case "DisablePassedOthers": _DisablePassedOthers = r.ReadInt32() != 0; break; case "Crest": _Crest = r.ReadInt32() != 0; break; #endregion #region Int64[] case "bnpc": _BNpcs = r.ReadInt64Array(); break; #endregion #region Int32[] case "shopnpc": _ShopENpcs = r.ReadInt32Array(); break; case "instance_content": _InstanceContents = r.ReadInt32Array(); break; case "recipe": _Recipes = r.ReadInt32Array(); break; case "quest": _Quests = r.ReadInt32Array(); break; case "classjob": _ClassJobs = r.ReadInt32Array(); break; case "achievement": _Achievements = r.ReadInt32Array(); break; #endregion #region Int32 case "sell_price": _SellPrice = r.ReadInt32(); break; case "Repair": _RepairClassJob = r.ReadInt32(); break; case "RepairItem": _RepairItem = r.ReadInt32(); break; case "repair_price": _RepairPrice = r.ReadInt32(); break; case "MateriaSocket": _MateriaSocket = r.ReadInt32(); break; case "MaterializeType": _MaterializeType = r.ReadInt32(); break; case "Stain": _Stain = r.ReadInt32(); break; case "CondClassJob": _CondClassJob = r.ReadInt32(); break; case "Series": _Series = r.ReadInt32(); break; case "RecastTime": _RecastTime = r.ReadInt32(); break; #endregion #region Obj case "basic_param": _BasicParams = ParseBasicParam(r); break; case "basic_param_hq": _BasicParamsHq = ParseBasicParam(r); break; case "action": _Actions = ParseActions(r); break; case "action_hq": _ActionsHq = ParseActions(r); break; case "bonus": _Bonuses = ParseBonuses(r); break; case "bonus_hq": _BonusesHq = ParseBonuses(r); break; case "series_bonus": _SeriesBonuses = ParseSeriesBonuses(r); break; case "effect": if (!r.Read()) throw new InvalidOperationException(); _Effect = ParseBonus(r); break; case "color": _Color = ParseColor(r); break; #endregion default: Console.Error.WriteLine("Unknown 'Item' data key: {0}", r.Value); throw new NotSupportedException(); } } } } } _IsParsed = true; }