using Newtonsoft.Json.Serialization;
using System.Collections.Generic;
public static void Main()
TestNewtonsoft("{\"FirstName\":\"Joanna\", \"Data\":{\"Subject\":\"My Test Subject\"}}");
TestNewtonsoft("{\"firstName\":\"Joanna\", \"data\":{\"subject\":\"My Test Subject\"}}");
private static void TestSystemTextJson(string json)
var jsonSerializerOptions = new JsonSerializerOptions { PropertyNameCaseInsensitive = true, PropertyNamingPolicy = JsonNamingPolicy.CamelCase };
var person = System.Text.Json.JsonSerializer.Deserialize<Person>(json, jsonSerializerOptions);
var serializedPerson = System.Text.Json.JsonSerializer.Serialize(person, jsonSerializerOptions);
Console.WriteLine(" FirstName: " + person.FirstName);
Console.WriteLine(" Data: " + person.Data);
Console.WriteLine("Serialized: " + serializedPerson);
private static void TestNewtonsoft(string json)
Console.WriteLine(" Original: " + json);
var contractResolver = new DefaultContractResolver
NamingStrategy = new CamelCaseNamingStrategy()
var person = JsonConvert.DeserializeObject<Person>(json, new JsonSerializerSettings {ContractResolver = contractResolver });
var serializedPerson = JsonConvert.SerializeObject(person, new JsonSerializerSettings {ContractResolver = contractResolver });
Console.WriteLine("Serialized: " + serializedPerson);
Console.WriteLine(" FirstName: " + person.FirstName);
var x = (IDictionary<string, object>)person.Data;
if (x.ContainsKey("Subject"))
Console.WriteLine(" Subject: " + x["Subject"]);
Console.WriteLine(" subject: " + x["subject"]);
public string FirstName {get;set;}
public ExpandoObject Data {get;set;}