public void InsertWithID(FIRBaseData created) { var type = created.GetType(); var dic = getDic(type); int id = IncreaseIDCnt(type); created.uid = id; dic.Add(id, created); }
protected void ProcessResult(JObject resData) { var updated = resData["updated"] as JObject; var deleted = resData["deleted"] as JObject; if (updated != null) { var serializeSettings = new JsonSerializerSettings(); serializeSettings.ContractResolver = new PrivateSetterContractResolver(); var serializer = JsonSerializer.Create(serializeSettings); foreach (JProperty classData in updated.Properties()) { var type = dataTypeContainer.TypeDic[classData.Name]; var arr = classData.Value as JArray; foreach (JObject itemData in arr) { FIRBaseData temp = null; int uid = itemData["uid"].Value <int>(); if (targetContainer.ContainsID(type, uid) == false) { temp = targetContainer.Create(type); Debug.Log($"created class={type.Name} uid={uid}"); } else { temp = targetContainer.GetByID(type, uid); Debug.Log($"updated class={type.Name} uid={uid}"); } //Notify change! var afterData = (FIRBaseData)itemData.ToObject(type); targetContainer.notifier.OnNext(Tuple.Create <FIRBaseData, FIRBaseData>(temp, afterData)); // JsonConvert.PopulateObject(itemData.ToString(),temp,serializeSettings); //Update Item using (var reader = itemData.CreateReader()){ serializer.Populate(reader, temp); } targetContainer.afterNotifier.OnNext(temp); } } } if (deleted != null) { foreach (JProperty classData in deleted.Properties()) { var type = dataTypeContainer.TypeDic[classData.Name]; var arr = classData.Value as JArray; // Debug.Log("Trying="+type.Name); foreach (JObject itemData in arr) { int uid = itemData["uid"].Value <int>(); if (targetContainer.ContainsID(type, uid) == true) { targetContainer.Dispose(type, uid); Debug.Log($"Deleted class={type.Name} uid={uid}"); } else { throw new System.Exception($"try to delete not exist class={type.Name} uid={uid}"); } } } } targetContainer.totalAfterNotifier.OnNext(Unit.Default); }