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 class MyCustomContractResolver
: DefaultContractResolver
public MyCustomContractResolver()
NamingStrategy = new CamelCaseNamingStrategy();
protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
var jsonProperties = base.CreateProperties(type, memberSerialization);
foreach (var jsonProperty in jsonProperties)
var propertyInfo = type.GetProperty(jsonProperty.UnderlyingName);
var defaultValueProvider = jsonProperty.ValueProvider;
jsonProperty.ValueProvider = new MyValueProvider(defaultValueProvider);
public class MyValueProvider
private readonly IValueProvider _valueProvider;
public MyValueProvider(IValueProvider valueProvider)
_valueProvider = valueProvider;
public void SetValue(object target, object value)
_valueProvider.SetValue(target, value);
Console.WriteLine("Value set: {0}", value);
public object GetValue(object target)
var value = _valueProvider.GetValue(target);
Console.WriteLine("Value get: {0}", value);
public class SampleMessage
public string Text { get { return text; } }
public int Number { get { return number; } }
public SampleInner SampleInner { get; set; }
public SampleMessage(string text, int number, SampleInner sampleInner)
SampleInner = sampleInner;
public string AnotherText { get; private set; }
public int AnotherNumber { get; private set; }
private SampleInner() { }
public SampleInner(string anotherText, int anotherNumber)
this.AnotherText = anotherText;
this.AnotherNumber = anotherNumber;
private static JsonSerializerSettings GetJsonSettings(IContractResolver contractResolver)
new JsonSerializerSettings
ContractResolver = contractResolver
public static void Test()
var text = "This is text";
var anotherText = "This is another text";
var sampleInner = new SampleInner(anotherText, anotherNumber);
var sample = new SampleMessage(text, number, sampleInner);
var myCustomContractResolver = new MyCustomContractResolver();
var jsonSettings = GetJsonSettings(myCustomContractResolver);
Console.WriteLine("Serializing..");
var json = JsonConvert.SerializeObject(sample, jsonSettings);
Console.WriteLine("Deserializing..");
var sampleDeserialized = JsonConvert.DeserializeObject(json, typeof(SampleMessage), jsonSettings);
Console.WriteLine(".. done.");
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: ");