public void WriteJsonProperty(JsonWriter writer, JsonSerializer serializer, ModifiableEntity mod, string lowerCaseName, PropertyConverter pc, PropertyRoute route) { if (pc.CustomWriteJsonProperty != null) { pc.CustomWriteJsonProperty(new WriteJsonPropertyContext { JsonWriter = writer, JsonSerializer = serializer, LowerCaseName = lowerCaseName, Entity = mod, ParentPropertyRoute = route, PropertyConverter = pc }); } else { var pr = route.Add(pc.PropertyValidator.PropertyInfo); string error = CanReadPropertyRoute?.Invoke(pr); if (error != null) { return; } using (JsonSerializerExtensions.SetCurrentPropertyRoute(pr)) { writer.WritePropertyName(lowerCaseName); serializer.Serialize(writer, pc.GetValue(mod)); } } }
public void WriteJsonProperty(JsonWriter writer, JsonSerializer serializer, ModifiableEntity mod, string lowerCaseName, PropertyConverter pc, PropertyRoute route) { if (pc.CustomWriteJsonProperty != null) { pc.CustomWriteJsonProperty(new WriteJsonPropertyContext { JsonWriter = writer, JsonSerializer = serializer, LowerCaseName = lowerCaseName, Entity = mod, ParentPropertyRoute = route, PropertyConverter = pc }); } else { var pr = route.Add(pc.PropertyValidator.PropertyInfo); string error = CanReadPropertyRoute?.Invoke(pr); if (error != null) { return; } using (JsonSerializerExtensions.SetCurrentPropertyRoute(pr)) { writer.WritePropertyName(lowerCaseName); var val = pc.GetValue(mod); if (val is Lite <Entity> lite) { new LiteJsonConverter().WriteJson(writer, lite, serializer); } else { serializer.Serialize(writer, pc.GetValue(mod)); } if (writer.WriteState == WriteState.Property) { throw new InvalidOperationException($"Impossible to serialize '{mod}' to JSON. Maybe there is a cycle?"); } } } }
public void ReadJsonProperty(JsonReader reader, JsonSerializer serializer, ModifiableEntity entity, PropertyConverter pc, PropertyRoute parentRoute, bool markedAsModified) { if (pc.CustomReadJsonProperty != null) { pc.CustomReadJsonProperty(new ReadJsonPropertyContext { JsonReader = reader, JsonSerializer = serializer, Entity = entity, ParentPropertyRoute = parentRoute, PropertyConverter = pc, }); } else { object oldValue = pc.GetValue(entity); var pi = pc.PropertyValidator.PropertyInfo; var pr = parentRoute.Add(pi); using (JsonSerializerExtensions.SetCurrentPropertyRoute(pr)) { object newValue = serializer.DeserializeValue(reader, pi.PropertyType, oldValue); if (!IsEquals(newValue, oldValue)) { if (!markedAsModified && parentRoute.RootType.IsEntity()) { try { //Call attention of developer throw new InvalidOperationException($"'modified' is not set but '{pi.Name}' is modified"); } catch (Exception) { } } else { AssertCanWrite(pr); if (newValue == null && pc.IsNotNull()) //JSON.Net already complaining { return; } pc.SetValue?.Invoke(entity, newValue); } } } } }
public void ReadJsonProperty(JsonReader reader, JsonSerializer serializer, ModifiableEntity entity, PropertyConverter pc, PropertyRoute parentRoute, bool markedAsModified) { if (pc.CustomReadJsonProperty != null) { pc.CustomReadJsonProperty(new ReadJsonPropertyContext { JsonReader = reader, JsonSerializer = serializer, Entity = entity, ParentPropertyRoute = parentRoute, PropertyConverter = pc, }); } else { object oldValue = pc.GetValue(entity); var pi = pc.PropertyValidator.PropertyInfo; var pr = parentRoute.Add(pi); using (JsonSerializerExtensions.SetCurrentPropertyRoute(pr)) { object newValue = serializer.DeserializeValue(reader, pi.PropertyType, oldValue); if (!IsEquals(newValue, oldValue)) { if (!markedAsModified && parentRoute.RootType.IsEntity()) { try { //Call attention of developer throw new InvalidOperationException($"'modified' is not set but '{pi.Name}' is modified"); } catch (Exception) { } } else { AssertCanWrite(pr); if (newValue == null && pc.IsNotNull()) //JSON.Net already complaining return; pc.SetValue?.Invoke(entity, newValue); } } } } }
public void WriteJsonProperty(JsonWriter writer, JsonSerializer serializer, ModifiableEntity mod, string lowerCaseName, PropertyConverter pc, PropertyRoute route) { if (pc.CustomWriteJsonProperty != null) { pc.CustomWriteJsonProperty(new WriteJsonPropertyContext { JsonWriter = writer, JsonSerializer = serializer, LowerCaseName = lowerCaseName, Entity = mod, ParentPropertyRoute = route, PropertyConverter = pc }); } else { var pr = route.Add(pc.PropertyValidator.PropertyInfo); string error = CanReadPropertyRoute?.Invoke(pr); if (error != null) return; using (JsonSerializerExtensions.SetCurrentPropertyRoute(pr)) { writer.WritePropertyName(lowerCaseName); serializer.Serialize(writer, pc.GetValue(mod)); } } }