使用 Utf8JsonReader 整体读取嵌套数组

Read nested array as whole with Utf8JsonReader

我正在尝试使用 System.Text.JsonUtf8JsonReader 解析 GeoJSON 几何定义。
我的问题是几何定义的 coordinates 属性 可能位于 type 的定义之前。 coordinates 可以是


因此,如果我不知道 type.
,我将无法正确解析 coordinates 属性 有没有办法整体读取它并稍后使用 Utf8JsonReader?

解析它

我通过使用以下函数实现了我喜欢做的事情

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());
}