Skip to content

[API Proposal]: Add JsonElement.Parse accelerator methods #108930

Closed
@eiriktsarpalis

Description

@eiriktsarpalis

Background and motivation

Today there is no quick way to create a JsonElement instance from a JSON string. The nearest alternative is using the JsonDocument.Parse method:

JsonElement element = JsonDocument.Parse("{}").RootElement;

However this approach has the disadvantage of creating an IDisposable JsonDocument which uses pooled buffers. The correct way to do this involves using the JsonElement.ParseValue(ref Utf8JsonReader) method as follows:

Utf8JsonReader reader = new("{}"u8);
JsonElement element = JsonElement.ParseValue(ref reader);

or using JsonSerializer.Deserialize, which suffers from the usual suite of concerns when needing to write AOT friendly components:

JsonSerializer.Deserialize<JsonElement>("{}");

This issue proposes we expose a couple of accelerator Parse methods on JsonElement that support creating non-pooled JsonElement instances.

API Proposal

namespace System.Text.Json;

public partial struct JsonElement
{
    // Existing API
    public static JsonElement ParseValue(ref Utf8JsonReader reader);
    // New APIs
    public static JsonElement Parse(string json);
    public static JsonElement Parse(ReadOnlySpan<byte> utf8Json);
}

API Usage

JsonElement element = JsonElement.Parse("{}"u8);

Alternative Designs

No response

Risks

No response

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions