Estoy perplejo sobre cómo guardar/pasar MongoDB UpdateDefinition para iniciar sesión y usar más adelante
Creé funciones generales para MongoDB en uso de Azure en una colección para obtener, insertar, eliminar y actualizar que funcionan bien.
El propósito es poder tener una forma estándar y preconfigurada de interactuar con la colección. Especialmente para la actualización, el objetivo es poder pasar de manera flexible una definición de actualización adecuada donde esa lógica comercial se realiza en otro lugar y se pasa.
Puedo crear/actualizar/establecer/combinar UpdateDefinition, pero cuando intento registrarlo serializándolo, muestra nulo:
JsonConvert.SerializeObject(updateDef)Cuando intento registrarlo, guardarlo en otra clase o pasarlo a otra función, muestra nulo:
public class Account { [BsonElement("AccountId")] public int AccountId { get; set; } [BsonElement("Email")] public string Email { get; set; } } var updateBuilder = Builders<Account>.Update; var updates = new List<UpdateDefinition<Account>>(); //just using one update here for brevity - purpose is there could be 1:many depending on fields updated updates.Add(updateBuilder.Set(a => a.Email, email)); //Once all the logic and field update determinations are made var updateDef = updateBuilder.Combine(updates); //The updateDef does not serialize to string, it displays null when logging. _logger.LogInformation("{0} - Update Definition: {1}", actionName, JsonConvert.SerializeObject(updateDef)); //Class Created for passing the Account Update Information for Use by update function public class AccountUpdateInfo { [BsonElement("AccountId")] public int AccountId { get; set; } [BsonElement("Update")] public UpdateDefinition<Account> UpdateDef { get; set; } } var acct = new AccountUpdateInfo(); acctInfo.UpdateDef = updateDef //This also logs a null value for the Update Definition field when the class is serialized. _logger.LogInformation("{0} - AccountUpdateInfo: {1}", actionName, JsonConvert.SerializeObject(acct));Cualquier pensamiento o idea sobre lo que está sucediendo? Estoy perplejo sobre por qué no puedo serializar para iniciar sesión o pasar el valor en una clase como esperaría
prueba esto:
var json = updateDef.Render( BsonSerializer.SerializerRegistry.GetSerializer<Account>(), BsonSerializer.SerializerRegistry) .AsBsonDocument .ToString();y para convertir una cadena json en una definición de actualización (usando un operador implícito), puede hacer lo siguiente:
UpdateDefinition<Account> updateDef = json; esto está fuera de mi cabeza y no probado. lo único de lo que no estoy seguro (sin un IDE) es la parte .Document.ToString() anterior.