public static void Main()
OuterObject outer = new OuterObject
string json = JsonConvert.SerializeObject(outer);
var deserializedOuter = JsonConvert.DeserializeObject<OuterObject>(json);
Console.WriteLine(deserializedOuter.MyValue.Value);
[JsonProperty("propertyOfTypeMyValue")]
public MyValue MyValue { get; set; }
[JsonConverter(typeof(MyValueConverter))]
public int Value { get; private set; }
public class MyValueConverter : JsonConverter
public override bool CanConvert(Type objectType)
return objectType == typeof(MyValue);
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
if (reader.TokenType == JsonToken.Null)
if (reader.TokenType == JsonToken.Integer)
return new MyValue(Convert.ToInt32(reader.Value));
throw new JsonException("Unexpected token type: " + reader.TokenType);
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
writer.WriteValue(((MyValue)value).Value);