using System.Text.Encodings.Web; using System.Text.Json; using System.Text.Json.Nodes; namespace MinecraftClient; /// /// JSON utilities backed by System.Text.Json. /// public static class Json { private static readonly JsonSerializerOptions s_escapeOptions = new() { Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping }; /// /// Parse a JSON string into a mutable DOM. /// public static JsonNode? ParseJson(string json) => JsonNode.Parse(json); /// /// Escape a string for embedding inside a JSON string literal. /// Uses System.Text.Json serialization and strips the surrounding quotes. /// public static string EscapeString(string src) => JsonSerializer.Serialize(src, s_escapeOptions)[1..^1]; } /// /// Extension helpers for that replicate the access patterns /// of the former JSONData.StringValue property. /// public static class JsonNodeExtensions { /// /// Return the string representation of any JSON value. /// Strings are returned without quotes; numbers, booleans, and null /// are returned as their text representation. /// public static string GetStringValue(this JsonNode? node) => node switch { null => "null", JsonValue val when val.TryGetValue(out var s) => s, _ => node.ToJsonString() }; }