Joshua Duxbury
Joshua Duxbury

Reputation: 5260

JsonDocument Get JSON String

I need an example of getting a JSON string from a JsonDocument. I can get properties with RootElement.GetProperty("ItemName") and then call .GetString() but can't see a way to just get the root element as a JSON string?

Upvotes: 25

Views: 29817

Answers (3)

Alberto
Alberto

Reputation: 15941

Here an example:

JsonDocument jdoc = JsonDocument.Parse("{\"a\":123}");

using(var stream = new MemoryStream())
{
    Utf8JsonWriter writer = new Utf8JsonWriter(stream, new JsonWriterOptions { Indented = true });
    jdoc.WriteTo(writer);
    writer.Flush();
    string json = Encoding.UTF8.GetString(stream.ToArray());
}

For an easier usage you could put it in an extension method like:

public static string ToJsonString(this JsonDocument jdoc)
{
    using (var stream = new MemoryStream())
    {
        Utf8JsonWriter writer = new Utf8JsonWriter(stream, new JsonWriterOptions { Indented = true });
        jdoc.WriteTo(writer);
        writer.Flush();
        return Encoding.UTF8.GetString(stream.ToArray());
    }
}

And use it like:

JsonDocument jdoc = JsonDocument.Parse("{\"a\":123}");
string json = jdoc.ToJsonString();

Update: if you don't need a formatted output:

string json = jdoc.RootElement.GetRawText();

Upvotes: 38

ltolentino
ltolentino

Reputation: 101

I have use RootElement to get a JsonElement and then call .ToString().

JsonDocument jdoc = JsonDocument.Parse("{\"a\":123}");
string json = jdoc.RootElement.ToString();

Upvotes: 10

tmaj
tmaj

Reputation: 35037

For the record there are 2 code snippets in official doco at How to serialize and deserialize (marshal and unmarshal) JSON in .NET


A. Use JsonDocument to write JSON

The following example shows how to write JSON from a JsonDocument:

(surprisingly long code snippet here)

The preceding code:

  • Reads a JSON file, loads the data into a JsonDocument, and writes formatted (pretty-printed) JSON to a file.
  • Uses JsonDocumentOptions to specify that comments in the input JSON are allowed but ignored.
  • When finished, calls Flush on the writer. An alternative is to let the writer autoflush when it's disposed.

B. Use Utf8JsonWriter

The following example shows how to use the Utf8JsonWriter class:

(...)

The snipped can be adjusted to use JsonDocument.Parse:

using var stream = new System.IO.MemoryStream();
using (var writer = new Utf8JsonWriter(stream, new JsonWriterOptions { Indented = true }))
{
   var jsonDocument = JsonDocument.Parse(content);
   jsonDocument.WriteTo(writer);
}

var formatted = System.Text.Encoding.UTF8.GetString(stream.ToArray());

Upvotes: 2

Related Questions