为什么c#utf8 json需要将obj序列化为utf8字节[],然后是utf8.getstring?这样做的好处是什么?

为什么c#utf8 json需要将obj序列化为utf8字节[],然后是utf8.getstring?这样做的好处是什么?,c#,json,C#,Json,为什么c#utf8 json需要将obj序列化为utf8字节[],然后是utf8.getstring?这样做的好处是什么 UTF8JSON是C#中速度最高的json序列化工具之一。序列化json时,对象通常被解析为字符串或字符,然后填充到StringBuilder中,后者维护一个字符[],最后调用ToString()方法将字符[]转换为字符串。UTF8JSON维护一个字节[],它首先将对象解析为utf8格式的字节[],然后调用utf8。此字节[]上的GetString()方法。我不知道这种方法和

为什么c#utf8 json需要将obj序列化为utf8字节[],然后是utf8.getstring?这样做的好处是什么

UTF8JSON是C#中速度最高的json序列化工具之一。序列化json时,对象通常被解析为字符串或字符,然后填充到StringBuilder中,后者维护一个字符[],最后调用ToString()方法将字符[]转换为字符串。UTF8JSON维护一个字节[],它首先将对象解析为utf8格式的字节[],然后调用utf8。此字节[]上的GetString()方法。我不知道这种方法和其他方法有什么区别。这是性能差异吗?但是通过我的验证,char[]->ToString()变成字符串的速度比byte[]->UTF8.GetString()快。为什么UTF8JSON会这样做

obj->char[]->字符串

obj->byte[]->字符串


我想我错了。我的意思是为什么同样的序列化逻辑,UTF-8使用byte[]存储,stringbuiler使用char[]存储,UTF-8更快


开。net fx中,我将JSON拼接到StringBuilder中,以比较与utf-8的性能。结果是UTF-8的速度提高了一倍。通过阅读源代码,我发现我们的序列化逻辑是相同的,但是为什么UTF-8的速度能比我快一倍呢?您知道,UTF-8还有一层字节[]来表示字符串消耗,stringbuilder的ToString()比UTF8快。GetString()。

在.NET中,就其现状而言,
char
string
是UTF-16编码的,而不是UTF-8编码的。在这种编码中,每个
char
或代码单元正好有2个字节;其中,在UTF-8中,每个字符可能有1个或更多字节。一般来说,web已经基本上标准化到UTF-8上进行编码,因此将
字节[]
原始写入流比先将UTF-16值转换为UTF-8然后转储到流中更容易。

你是说neuecc/Utf8Json

将对象序列化为json字符串后,通常会发送它,然后需要首先将字符串转换为字节[]

因此,如果序列化程序可以直接输出byte[]数据,那么这就是最佳选择