C# JsonElement 转字符串而不格式化

Xap*_*ann 7 c# json system.text.json jsonelement

我需要将 JsonElement 转换为字符串,但没有任何回车符、制表符或空格。一个简单的 ToString() 可以工作,但将它们留在:

data.ToString()
Run Code Online (Sandbox Code Playgroud)

结果:

"{\r\n "字段1": "值1",\r\n "字段2": "值2"\r\n }"

寻找:

"{"字段1":"值1","字段2":"值2"}"

当然,我可以执行一个简单的查找和替换字符串命令。但是,有些字段将包含回车符、制表符或空格,我不想更改它们。

编辑:无法删除此问题,请有人删除此问题,因为它已经得到答复。

hal*_*ldo 10

在 .NET 6 中,您可以使用JsonNode.ToJsonString()(使用 System.Text.Json.Nodes 命名空间),但您需要先从 转换JsonElement为JsonObject:

var jsonString = JsonObject.Create(data).ToJsonString();
Run Code Online (Sandbox Code Playgroud)

ToJsonString()接受JsonSerializerOptions作为参数,因此您可以指定WriteIndented是否想要不同的行为,但默认情况下它将输出WriteIndented = false(这是您想要的格式)。

可以转换为扩展方法:

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);
Run Code Online (Sandbox Code Playgroud)