using System.Text.Json.Nodes;
public static class JsonDocumentExtensions
public static bool IsSubsetOf(this JsonDocument subset, JsonDocument superset)
foreach (var subProp in subset.RootElement.EnumerateObject())
if (!superset.RootElement.TryGetProperty(subProp.Name, out var superPropValue)
|| superPropValue.ValueKind != subProp.Value.ValueKind
|| !JsonElement.DeepEquals(superPropValue, subProp.Value))
public static bool IsSubsetOf(this JsonObject subset, JsonObject superset)
foreach (var subProp in subset)
if (!superset.TryGetPropertyValue(subProp.Key, out var superPropValue)
|| superPropValue.GetValueKind() != subProp.Value.GetValueKind()
|| !JsonNode.DeepEquals(superPropValue, subProp.Value))
public class JsonSubsetComparison
public static void Main()
Console.WriteLine("Environment version: {0} ({1}), {2}.\n", System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription , Environment.Version, Environment.OSVersion);
static void TestJsonElement()
var jsonA = "{\"prop1\": 1, \"prop2\": [\"apple\" ], \"prop3\": \"extra big\"}";
var jsonB = "{\"prop1\": 1, \"prop2\": [\"apple\"]}";
using var docA = JsonDocument.Parse(jsonA);
using var docB = JsonDocument.Parse(jsonB);
bool result = docB.IsSubsetOf(docA);
Console.WriteLine("Result of testing JsonNode.TestJsonElement(): {0}", result);
static void TestJsonNode()
var jsonA = "{\"prop1\": 1, \"prop2\": [\"apple\" ], \"prop3\": \"extra big\"}";
var jsonB = "{\"prop1\": 1, \"prop2\": [\"apple\"]}";
var docA = JsonNode.Parse(jsonA).AsObject();
var docB = JsonNode.Parse(jsonB).AsObject();
bool result = docB.IsSubsetOf(docA);
Console.WriteLine("Result of testing JsonNode.IsSubsetOf(): {0}", result);