using System.Collections;
using System.Collections.Generic;
using System.Runtime.Serialization.Formatters;
using System.ComponentModel.DataAnnotations;
using System.Globalization;
using System.Collections.ObjectModel;
using System.Text.Json.Serialization;
using System.Text.Json.Serialization.Metadata;
using System.Text.Json.Nodes;
public static void Test()
Console.WriteLine("All tests passed");
var jsonArray = JsonSerializer.SerializeToNode(new int[] { 1, 2, 3, 4} )!.AsArray();
var path = JsonPath.Parse("$[0:-1]");
var results = path.Evaluate(jsonArray);
var newArray = JsonSerializer.SerializeToNode(results.Matches.Select(m => m.Value))!.AsArray();
Assert.That(new int [] { 1, 2, 3 }.SequenceEqual(newArray.Deserialize<int []>()!));
Assert.That(newArray.Count == Math.Max(0, jsonArray.Count - 1));
Console.WriteLine("Original array: {0}", JsonSerializer.Serialize(jsonArray, new JsonSerializerOptions { WriteIndented = false }));
Console.WriteLine("Filtered array: {0}\n", JsonSerializer.Serialize(newArray));
static void TestMultiple()
for (var i = 0; i < max; i++)
var jsonArray = JsonSerializer.SerializeToNode(Enumerable.Range(1, i))!.AsArray();
var path = JsonPath.Parse("$[0:-1]");
var results = path.Evaluate(jsonArray);
var newArray = JsonSerializer.SerializeToNode(results.Matches.Select(m => m.Value))!.AsArray();
Assert.That(Enumerable.Range(1, Math.Max(0, i-1)).SequenceEqual(newArray.Deserialize<int []>()!));
Assert.That(newArray.Count == Math.Max(0, jsonArray.Count - 1));
Console.WriteLine("Original array: {0}", JsonSerializer.Serialize(jsonArray, new JsonSerializerOptions { WriteIndented = false }));
Console.WriteLine("Filtered array: {0}\n", JsonSerializer.Serialize(newArray));
public static void Main()
Console.WriteLine("Environment version: {0} ({1}), {2}", System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription , Environment.Version, Environment.OSVersion);
Console.WriteLine("System.Text.Json version: " + typeof(JsonSerializer).Assembly.FullName);
Console.WriteLine("Failed with unhandled exception: ");