using System.Collections;
using System.Collections.Generic;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization;
public StringId Id { get; set; }
public string Name { get; set; }
[JsonConverter(typeof(StringIdConverter))]
public string Value { get; set; }
class StringIdConverter : JsonConverter
public override bool CanConvert(Type objectType)
return objectType == typeof(StringId);
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
if (reader.TokenType == JsonToken.Null)
var token = JToken.Load(reader);
return new StringId { Value = (string)token };
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
var id = (StringId)value;
writer.WriteValue(id.Value);
public static void Main()
var test = new Car { Id = new StringId { Value = "1492" }, Name = "my name" };
var json = JsonConvert.SerializeObject(test, Formatting.Indented);
var test2 = JsonConvert.DeserializeObject<Car>(json);
Console.WriteLine("Deserialized Id.Value: ");
Console.WriteLine(test2.Id.Value);