using Newtonsoft.Json.Linq;
public static void Main()
SomeObject so = new SomeObject { Destination = new Destination(123), Message = "hello world" };
TestSerializationRoundTrip(so);
Console.WriteLine("Round trip OK");
Console.WriteLine("Converter OK");
private static void TestSerializationRoundTrip(SomeObject so)
Assume.That(so, Is.Not.Null);
Assume.That(so.Destination, Is.Not.Null);
var json = JsonConvert.SerializeObject(so);
var newObj = JsonConvert.DeserializeObject<SomeObject>(json);
Assert.That(newObj, Is.Not.Null);
Assert.That(newObj.Destination, Is.Not.Null);
Assert.That(newObj.Destination.Id, Is.EqualTo(so.Destination.Id));
private static void TestConverter(int testValue)
var sut = new DestinationConverter();
JsonReader reader = new JTokenReader(JToken.Parse(string.Format("{0}", testValue)));
var obj = sut.ReadJson(reader, typeof(Destination), null, JsonSerializer.CreateDefault());
var result = obj as Destination;
Assert.That(result, Is.Not.Null);
Assert.That(result, Is.InstanceOf<Destination>());
Assert.That(result.Id, Is.EqualTo(testValue));
[JsonProperty("destination")]
public Destination Destination { get; set; }
[JsonProperty("message")]
public string Message { get; set; }
[JsonConverter(typeof(DestinationConverter))]
public Destination (int destinationId)
public int Id { get; private set;}
public class DestinationConverter : JsonConverter
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
if (value is Destination)
Destination destination = value as Destination;
writer.WriteValue(destination.Id);
public override bool CanConvert(Type objectType)
return objectType == typeof(Destination);
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
var value = reader.Value;
return new Destination((int)v);