using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Serialization;
using JsonSerializer = Newtonsoft.Json.JsonSerializer;
public static void Main()
string myJsonInput = @"{ 'FirstLevel': {'SecondLevel': {'ThirdLevel': 'ThirdLEvelValue'} },
'Stores': [ 'Lambton Quay', 'Willis Street' ],
'Manufacturers': [ { 'Name': 'Acme Co', 'Products': [ { 'Name': 'Anvil', 'Price': 50 } ] }, { 'Name': 'Contoso', 'Products': [ { 'Name': 'Elbow Grease', 'Price': 99.95 }, { 'Name': 'Headlight Fluid', 'Price': 4 } ] } ] }";
Console.WriteLine("===========Json Input===============\n");
Console.WriteLine(myJsonInput + "\n");
Console.WriteLine("====================================\n");
JsonSerializer _camelCaseSerializer = JsonSerializer.Create(
new JsonSerializerSettings
ContractResolver = new CamelCasePropertyNamesContractResolver()
var solution1Des = JsonConvert.DeserializeObject<ExpandoObject>(myJsonInput);
JObject solution1Jobject = JObject.FromObject(solution1Des, _camelCaseSerializer);
JToken solution1JToken = solution1Jobject.SelectToken("$.manufacturers[?(@.name == 'Acme Co')]");
Console.WriteLine("=============solution1=======================\n");
Console.WriteLine("json result");
Console.WriteLine(solution1Jobject + "\n");
Console.WriteLine("query result");
Console.WriteLine(solution1JToken + "\n");
Console.WriteLine("====================================\n");
var jsonSerializerSettings = new JsonSerializerSettings
ContractResolver = new CamelCasePropertyNamesContractResolver()
dynamic solution2Des = JsonConvert.DeserializeObject<ExpandoObject>(myJsonInput);
if (solution2Des.GetType().GetProperty(nameof(solution2Des.name)) != null)
Console.Write(solution2Des.name);
string solution2Result = JsonConvert.SerializeObject(solution2Des);
JObject solution2Jobject = JObject.Parse(solution2Result);
JToken solution2JToken = solution2Jobject.SelectToken("$.manufacturers[?(@.name == 'Acme Co')]");
Console.WriteLine("=============solution2=======================\n");
Console.WriteLine("json result");
Console.WriteLine(solution1Jobject + "\n");
Console.WriteLine("query result" + "\n");
Console.WriteLine(solution1JToken);
Console.WriteLine("====================================\n");
var solution3Des = JsonConvert.DeserializeObject<dynamic>(myJsonInput);
JObject solution3Result = JObject.FromObject(solution3Des.ToObject<ExpandoObject>(), _camelCaseSerializer);
JToken solution3JToken = solution3Result.SelectToken("$.manufacturers[?(@.name == 'Acme Co')]");
Console.WriteLine("=============solution3=======================\n");
Console.WriteLine("json result");
Console.WriteLine(solution3Result + "\n");
Console.WriteLine("query result");
Console.WriteLine(solution3JToken + "\n");
Console.WriteLine("====================================");