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); }
private async Task<DocumentMetadata> GetDocumentMetadataAsync<T>(T instance) { DocumentMetadata value; if (entitiesAndMetadata.TryGetValue(instance, out value) == false) { string id; if (GenerateEntityIdOnTheClient.TryGetIdFromInstance(instance, out id) || (instance is IDynamicMetaObjectProvider && GenerateEntityIdOnTheClient.TryGetIdFromDynamic(instance, out id))) { AssertNoNonUniqueInstance(instance, id); var jsonDocument = await GetJsonDocumentAsync(id).ConfigureAwait(false); value = GetDocumentMetadataValue(instance, id, jsonDocument); } else { throw new InvalidOperationException("Could not find the document key for " + instance); } } return value; }