using System.Collections.Generic;
using Newtonsoft.Json.Linq;
using System.Transactions;
public static void Main(string[] args)
JsonSerializerSettings jsonSerializerSettings = new JsonSerializerSettings() { Converters = { new PreDockValidationCustomConverter() } };
DeploymentData test = JsonConvert.DeserializeObject<DeploymentData>(
"\"DeploymentLifeCycle\":\"PreReservation\"" +
"}", jsonSerializerSettings);
DeploymentData test2 = JsonConvert.DeserializeObject<DeploymentData>(
"\"DeploymentLifeCycle\":\"BindingData\"}", jsonSerializerSettings);
Console.WriteLine(validate(test));
Console.WriteLine(validate(test2));
private static bool validate(DeploymentData test)
if (test.DeploymentLifeCycle == "PostReservationData")
PostReservationData x = (PostReservationData)test;
Console.WriteLine(x.propertyF);
if (test.DeploymentLifeCycle == "BindingData")
BindingData binding = (BindingData)test;
Console.WriteLine(binding.propertyE);
return binding.IsValid();
if (test.DeploymentLifeCycle == "PreReservation")
PreReservationData preReservation = (PreReservationData)test;
Console.WriteLine(preReservation.propertyA);
return preReservation.IsValid();
public string DeploymentLifeCycle { get; set; }
class PreReservationData : DeploymentData
public string propertyA { get; set; }
public string propertyB { get; set; }
public string propertyC { get; set; }
Console.WriteLine("PreReservationData validations");
class BindingData : PreReservationData
public string propertyD { get; set; }
public string propertyE { get; set; }
Console.WriteLine("BindingData validations");
class PostReservationData : BindingData
public string propertyF { get; set; }
Console.WriteLine("PostReservationData validations");
return base.IsValid() && propertyF != null;
public class PreDockValidationCustomConverter : JsonConverter
public override bool CanConvert(Type objectType)
return (objectType == typeof(DeploymentData));
public override object ReadJson(JsonReader jsonReader, Type type, object existingValue, JsonSerializer jsonSerializer)
JObject jo = JObject.Load(jsonReader);
if (jo["DeploymentLifeCycle"].Value<string>() == "PreReservation")
return jo.ToObject<PreReservationData>(jsonSerializer);
if (jo["DeploymentLifeCycle"].Value<string>() == "BindingData")
return jo.ToObject<BindingData>(jsonSerializer);
if (jo["DeploymentLifeCycle"].Value<string>() == "PostReservation")
return jo.ToObject<PostReservationData>(jsonSerializer);
public override bool CanWrite
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
throw new NotImplementedException();