C# JsonElement to string without formatting

5k Views Asked by At

I need to convert a JsonElement to string but without any carriage return, tabs or spaces. A simple ToString() works but leaves those in:

data.ToString()

Results:

"{\r\n "Field1": "Value1",\r\n "Field2": "Value2"\r\n }"

Looking for:

"{"Field1": "Value1","Field2":"Value2"}"

Sure I could do a simple find and replace string command. However, there will be some fields that will contain carriage return, or tabs or spaces and I don't want to change those.

edit: cannot delete this please someone delete this as it has already been answered.

1

There are 1 best solutions below

0
On BEST ANSWER

In .NET 6 you can use JsonNode.ToJsonString() (using the System.Text.Json.Nodes namespace), but you'd need to convert from the JsonElement to a JsonObject first:

var jsonString = JsonObject.Create(data).ToJsonString();

ToJsonString() takes JsonSerializerOptions as parameter so you could specify WriteIndented if you wanted different behaviour, but by default it will output with WriteIndented = false (which is your desired format).

Could be converted to an extension method:

public static class Extensions
{
    public static string ToJsonString(this JsonElement element, bool indent = false) 
        => element.ValueKind != JsonValueKind.Object
            ? "" 
            : JsonObject.Create(element).ToJsonString(new JsonSerializerOptions { WriteIndented = indent });
}

// usage
// non-indented
var jsonString = element.ToJsonString();
// indented
var jsonString = element.ToJsonString(true);