通过使用以下功能,我实现了我喜欢做的事情
private ReadOnlySpan<byte> ReadCoordinateData(ref Utf8JsonReader reader)
{
reader.ReadToken(JsonTokenType.StartArray);
var res = new MemoryStream();
res.Write(System.Text.Encoding.UTF8.GetBytes("["), 0, 1);
int openBrackets = 1;
bool wasCloseBracket = false;
bool addComma = false;
byte bytComma = System.Text.Encoding.UTF8.GetBytes(",")[0];
while (openBrackets > 0)
{
// add a comma to separate arrays
if (reader.TokenType == JsonTokenType.StartArray)
{
if (wasCloseBracket)
res.WriteByte(bytComma);
addComma = false;
openBrackets++;
}
if (reader.TokenType == JsonTokenType.Number && addComma)
res.WriteByte(bytComma);
byte[] seq = reader.HasValueSequence
? reader.ValueSequence.ToArray()
: reader.ValueSpan.ToArray();
res.Write(seq, 0, seq.Length);
addComma = reader.TokenType == JsonTokenType.Number;
if (reader.TokenType == JsonTokenType.EndArray)
{
openBrackets--;
addComma = false;
wasCloseBracket = true;
}
else
{
wasCloseBracket = false;
}
if (!reader.Read())
throw new JsonException();
}
return new ReadOnlySpan<byte>(res.ToArray());
}