public object EntityFromJsonStream(Type type, BlittableJsonReaderObject jsonObject) { if (_reader == null) { _reader = new BlittableJsonReader(); } if (_serializer == null || _conventions.CustomizeJsonSerializer != _customize) { // we need to keep track and see if the event has been changed, // if so, we'll need a new instance of the serializer _customize = _conventions.CustomizeJsonSerializer; _serializer = _conventions.CreateSerializer(); } _reader.Init(jsonObject); using (DefaultRavenContractResolver.RegisterExtensionDataSetter((o, key, value) => { JToken id; if (key == Constants.Documents.Metadata.Key && value is JObject json) { if (json.TryGetValue(Constants.Documents.Metadata.Id, out id)) { if (_generateEntityIdOnTheClient.TryGetIdFromInstance(o, out var existing) && existing != null) { return; } _generateEntityIdOnTheClient.TrySetIdentity(o, id.Value <string>()); } } if (key == Constants.Documents.Metadata.Id) { id = value as JToken; if (id == null) { return; } if (_generateEntityIdOnTheClient.TryGetIdFromInstance(o, out var existing) && existing != null) { return; } _generateEntityIdOnTheClient.TrySetIdentity(o, id.Value <string>()); } })) { return(_serializer.Deserialize(_reader, type)); } }
public object EntityFromJsonStream(Type type, BlittableJsonReaderObject jsonObject) { _reader.Value.Init(jsonObject); using (DefaultRavenContractResolver.RegisterExtensionDataSetter((o, key, value) => { JToken id; if (key == Constants.Documents.Metadata.Key && value is JObject json) { if (json.TryGetValue(Constants.Documents.Metadata.Id, out id)) { if (_generateEntityIdOnTheClient.TryGetIdFromInstance(o, out var existing) && existing != null) { return; } var isProjection = json.TryGetValue(Constants.Documents.Metadata.Projection, out var projection) && projection.Type == JTokenType.Boolean && projection.Value <bool>(); _generateEntityIdOnTheClient.TrySetIdentity(o, id.Value <string>(), isProjection); } } if (key == Constants.Documents.Metadata.Id) { id = value as JToken; if (id == null) { return; } if (_generateEntityIdOnTheClient.TryGetIdFromInstance(o, out var existing) && existing != null) { return; } _generateEntityIdOnTheClient.TrySetIdentity(o, id.Value <string>()); } })) { return(_deserializer.Value.Deserialize(_reader.Value, type)); } }
private string GetId(object entity) { if (_generateEntityIdOnTheClient.TryGetIdFromInstance(entity, out var id)) { return(id); } id = _generateEntityIdOnTheClient.GenerateDocumentIdForStorage(entity); _generateEntityIdOnTheClient.TrySetIdentity(entity, id); //set Id property if it was null return(id); }
protected string ModifyObjectId(string id, object entity, RavenJObject metadata) { var shardId = shardStrategy.ShardResolutionStrategy.GenerateShardIdFor(entity, this); if (string.IsNullOrEmpty(shardId)) { throw new InvalidOperationException("Could not find shard id for " + entity + " because " + shardStrategy.ShardAccessStrategy + " returned null or empty string for the document shard id."); } metadata[Constants.RavenShardId] = shardId; var modifyDocumentId = shardStrategy.ModifyDocumentId(Conventions, shardId, id); if (modifyDocumentId != id) { GenerateEntityIdOnTheClient.TrySetIdentity(entity, modifyDocumentId); } return(modifyDocumentId); }