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 Destination Destination { get; set; }
public Destination(int destinationId)
public int Id { get; set; }
public class DestinationConverter : JsonConverter
public override bool CanConvert(System.Type objectType)
return objectType == typeof(Destination);
public override object ReadJson(Newtonsoft.Json.JsonReader reader, System.Type objectType, object existingValue, Newtonsoft.Json.JsonSerializer serializer)
var id = serializer.Deserialize<int?>(reader);
return new Destination(id.Value);
public override void WriteJson(Newtonsoft.Json.JsonWriter writer, object value, Newtonsoft.Json.JsonSerializer serializer)
writer.WriteValue(((Destination)value).Id);
public static void Test()
new TestClass().ReadJson_can_deserialize_an_integer_as_Destination(new DestinationConverter(), 101);
public void SomeObject_is_correctly_deserialized(SomeObject testObject)
var json = string.Format("{{\"destinationId\":{0}}}", testObject.Destination.Id);
Console.WriteLine("json: {}", json);
var obj = JsonConvert.DeserializeObject<SomeObject>(json);
Assert.That(obj.Destination.Id, Is.EqualTo(testObject.Destination.Id));
public void ReadJson_can_deserialize_an_integer_as_Destination(DestinationConverter sut, int testValue)
var json = string.Format("{0}", testValue);
JsonReader reader = new JsonTextReader(new StringReader(json));
while (reader.TokenType == JsonToken.None)
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));
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: ");