public interface ISteeringWheelIdentifier {}
public interface ISteeringWheel
ISteeringWheelIdentifier Identifier {get;}
public class ManufacturerIdentifier : ISteeringWheelIdentifier
public string ManufacturerEmail {get; set;}
public class PartNumberIdentifier : ISteeringWheelIdentifier
public string PartNumber {get; set;}
public class ClassicSteeringWheel : ISteeringWheel
public ClassicSteeringWheel(ManufacturerIdentifier identifier)
public string HornButtonManufacturer {get; set;}
public ISteeringWheelIdentifier Identifier {get;private set;}
public class ModernSteeringWheel : ISteeringWheel
public ModernSteeringWheel(PartNumberIdentifier identifier)
public string TouchpadManufacturer {get; set;}
public ISteeringWheelIdentifier Identifier {get;private set;}
public string CarBrand {get; set;}
public ISteeringWheel SteeringWheel {get; set;}
public static void Main()
var car1 = new Car{CarBrand="Ford", SteeringWheel = new ModernSteeringWheel(new PartNumberIdentifier{PartNumber = "123456"})};
var json = JsonConvert.SerializeObject(car1, Formatting.Indented);
var car2 = new Car{CarBrand="Toyota", SteeringWheel = new ClassicSteeringWheel(new ManufacturerIdentifier{ManufacturerEmail = "test@demo.com"})};
json = JsonConvert.SerializeObject(car2, Formatting.Indented);