using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Serialization;
public static void Main()
var settings = new JsonSerializerSettings
ContractResolver = new CustomResolver()
var serialized = JsonConvert.SerializeObject(person, settings);
var expected = @"{""FirstName"":""George"",""LastName"":""WASHINGTON""}";
Assert.Equal(expected, serialized);
Console.WriteLine(serialized);
Console.WriteLine(ex.GetType().Name + ": " + ex.Message);
public class CustomResolver : DefaultContractResolver
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
JsonProperty prop = base.CreateProperty(member, memberSerialization);
if (prop.DeclaringType == typeof(Person) && prop.UnderlyingName == "LastName")
prop.Converter = new AllCapsConverter();
public string FirstName { get; set; }
public string LastName { get; set; }
public class AllCapsConverter : JsonConverter
public override bool CanConvert(Type objectType)
return objectType == typeof(string);
public override bool CanRead
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
throw new NotSupportedException();
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
var str = value as string;
var upper = str.ToUpperInvariant();
JToken j = JToken.FromObject(upper);
public static void Equal(string expected, string actual)
if (!string.Equals(expected, actual))
throw new Exception("Strings are not equal. Expected \"" + expected + "\" but got \"" + actual + "\"");