using System.Collections;
using System.Collections.Generic;
using System.Runtime.Serialization.Formatters;
using System.ComponentModel.DataAnnotations;
using System.Globalization;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization;
public static void Test()
var jObject = JObject.Parse(GetJson());
Console.WriteLine("\nTest filtering using SequenceEquals():");
foreach (var category in jObject["Categories"].OfType<JObject>())
var result = category.Properties()
.SequenceEqual(new [] { "Name" });
Console.WriteLine("Result for Category \"{0}\" = {1}:", category["Name"], result);
Console.WriteLine(" " + category.ToString(Formatting.None));
Assert.IsTrue(count == 4, string.Format("Wrong number of objects {0} selected!", count));
Console.WriteLine("\nTest filtering using ordered SequenceEquals():");
var requiredKeys = new [] { "Name" }
.OrderBy(n => n, StringComparer.Ordinal).ToArray();
foreach (var category in jObject["Categories"].OfType<JObject>())
var result = category.Properties()
.OrderBy(n => n, StringComparer.Ordinal)
.SequenceEqual(requiredKeys);
Console.WriteLine("Result for Category \"{0}\" = {1}:", category["Name"], result);
Console.WriteLine(" " + category.ToString(Formatting.None));
Assert.IsTrue(count == 4, string.Format("Wrong number of objects {0} selected!", count));
Console.WriteLine("\nTest filtering using Except(...).Any():");
foreach (var category in jObject["Categories"].OfType<JObject>())
var result = !category.Properties()
.Except(new [] { "Name" })
Console.WriteLine("Result for Category \"{0}\" = {1}:", category["Name"], result);
Console.WriteLine(" " + category.ToString(Formatting.None));
Assert.IsTrue(count == 4, string.Format("Wrong number of objects {0} selected!", count));
""Name"": ""ThirdParty"",
{ ""Name"": ""Identity"" },
""Name"": ""Contact Information"",
{ ""Name"": ""Phones"" },
{ ""Name"": ""Addresses"" },
{ ""Name"": ""Bank Accounts"" },
{ ""No Name"": ""this object has no Name property and so should have been filtered out"" },
{ ""Name"": ""Test data"" },
public static void Main()
Console.WriteLine("Environment version: " + Environment.Version);
Console.WriteLine("Json.NET version: " + typeof(JsonSerializer).Assembly.FullName);
Console.WriteLine("Failed with unhandled exception: ");