¿Cómo puedo configurar JsonSerializer para que no agregue "\u0022" a la cadena para la propiedad EventData? porque obtengo:
{"Id":5,"CreateDate":"2021-04-21T05:26:30.9817284Z","EventData":"{\u0022Id\u0022:1,\u0022Correo electrónico\u0022:\u0022test@test.test\u0022 }"}
Nunca deserializaré EventData, debe ser legible. Y yo quiero:
{"Id":5,"CreateDate":"2021-04-21T05:26:30.9817284Z","EventData":"{Id:1,Email:test@test.test}"}
Mi código:
public class EmailSent { public int Id { get; set; } public string Email { get; set; } } public class UserCreated { public int Id { get; set; } public DateTime CreateDate { get; set; } public string EventData { get; set; } } var emailSent = new EmailSent { Id = 1, Email = "test@test.test" }; var userCreated = new UserCreated { Id = 5, CreateDate = DateTime.UtcNow, EventData = JsonSerializer.Serialize(emailSent) // I will never deserialize it }; string result = JsonSerializer.Serialize(userCreated);Puede usar, por ejemplo, UnsafeRelaxedJsonEscaping :
var serializeOptions = new JsonSerializerOptions { WriteIndented = true, Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping }; string json = JsonSerializer.Serialize(userCreated, serializeOptions);Esto producirá la siguiente salida:
{ "Id": 5, "CreateDate": "2021-04-21T07:49:23.4378969Z", "EventData": "{\"Id\":1,\"Email\":\"test@test.test\"}" }Referencia: Cómo personalizar la codificación de caracteres con System.Text.Json . Por favor, lea la precaución allí:
Precaución
En comparación con el codificador predeterminado, el codificador UnsafeRelaxedJsonEcaping es más permisivo a la hora de permitir que los caracteres pasen sin escape: (...)
Puede especificar el codificador 'JSONSerializerOptions' igual a JavaScriptTenCoder. Create(new TextEncoderSettings(UnicodeRanges.All)) como imagen ingrese la descripción de la imagen aquí