C# .NET标准中JsonSerializer.SerializeToUtf8Bytes的替代方案

C# .NET标准中JsonSerializer.SerializeToUtf8Bytes的替代方案,c#,.net-standard,C#,.net Standard,JsonSerializer是.NET Core和.NET 5的System.Text.Json命名空间的一部分。不幸的是,它在.NET标准中不可用 在.NET标准中是否有JsonSerializer.SerializeToUtf8Bytes方法的替代方法?您应该使用NuGet的Newtonsoft包序列化为字符串(JsonConvert.SerializeObject)。然后使用Encoding.UTF8.GetBytes使用UTF8将字符串编码为字节数组 有两个调用的原因是关注点分离。序列化

JsonSerializer是.NET Core和.NET 5的System.Text.Json命名空间的一部分。不幸的是,它在.NET标准中不可用


在.NET标准中是否有JsonSerializer.SerializeToUtf8Bytes方法的替代方法?

您应该使用NuGet的Newtonsoft包序列化为字符串(
JsonConvert.SerializeObject
)。然后使用
Encoding.UTF8.GetBytes
使用UTF8将字符串编码为字节数组

有两个调用的原因是关注点分离。序列化和编码是两个独立的关注点,不应该组合在一起,至少不应该在包级别


你可以在你的应用程序中自由地编写一个助手方法,当然可以将它们结合起来。。。一种将对象转换为UTF-8编码字节数组的方法。但首先要确保确实需要一个字节数组。以我的经验,这是罕见的。通常您可以直接使用序列化字符串。

这似乎是另一种选择:

Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(message))

你为什么需要这个?是什么阻止您使用其他库、序列化为字符串并获取UTF8字节?
JsonConvert
需要NuGet提供的Newtonsoft包。我建议安装Newtonsoft并使用这里的代码。这是个糟糕的建议。。。。我辩论过要投反对票。。。但由于许多其他的答案都暗示了同样的毫无意义的方法,这听起来似乎是人们喜欢的。。。事实上,这是重复的答案。。。如果需要流/字节数组中的Utf8输出,那么获取字符串结果真的没有意义。@AlexeiLevenkov使用给定的“标准”库(是的,我知道
Newtonsoft.Json
不是标准的,但在
System.Text.Json
之前,甚至微软都在ASP.NET核心中使用它)使用.NET标准2.1无法直接写入
UTF8
。。。这会使问题变得毫无意义(答案是:你不能)或偏离主题(正如你通常会找到可以做到这一点的库,但询问库是偏离主题的)。。。因此,这是一种替代方案,但有缺点(至少是内存使用量的3倍,显然是CPU)