如何将JsonSerializer设置为不将"\u0022“添加到EventData属性的字符串中?因为我得到:
{"Id":5,"CreateDate":"2021-04-21T05:26:30.9817284Z","EventData":"{\u0022Id\u0022:1,
我永远不会反序列化EventData,它必须是可读的。我想:
{"Id":5,"CreateDate":"2021-04-21T05:26:30.9817284Z","EventData":"{Id:1,Email:test@test.test}"}
我的代码:
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);
发布于 2021-04-21 07:51:08
例如,您可以使用UnsafeRelaxedJsonEscaping
var serializeOptions = new JsonSerializerOptions
{
WriteIndented = true,
Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping
};
string json = JsonSerializer.Serialize(userCreated, serializeOptions);
这将产生以下输出:
{
"Id": 5,
"CreateDate": "2021-04-21T07:49:23.4378969Z",
"EventData": "{\"Id\":1,\"Email\":\"test@test.test\"}"
}
参考资料:如何使用System.Text.Json自定义字符编码.请阅读此处的警告:
警诫 与默认编码器相比,UnsafeRelaxedJsonEscaping编码器允许字符通过非转义:(.)
发布于 2022-05-02 11:54:50
之所以会发生这种情况,是因为JsonSerializer.Serialize()被多次调用。
发布于 2021-04-21 06:01:07
您可以指定“JSONSerializerOptions”编码器等于JavaScriptTenCoder。创建(新TextEncoderSettings(UnicodeRanges.All))如下
public static string ToString(this object str)
{
try
{
string sResult = JsonSerializer.Serialize(str, new JsonSerializerOptions{WriteIndented = true, Encoder = JavaScriptEncoder.Create(new TextEncoderSettings(System.Text.Unicode.UnicodeRanges.All))});
return sResult;
}
}
https://stackoverflow.com/questions/67189964
复制相似问题