using System.Collections;
using System.Collections.Generic;
using System.Runtime.Serialization.Formatters;
using System.ComponentModel.DataAnnotations;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization;
public AbcDTO() { this.AdditionalData = new Dictionary<string, object>(); }
public string Prop1 { get; set; }
public string Prop2 { get; set; }
public Dictionary<string, object> AdditionalData { get; private set; }
public static void Test()
var dto = JsonConvert.DeserializeObject<AbcDTO>(json);
var json2 = JsonConvert.SerializeObject(dto, Formatting.Indented);
Console.WriteLine(json2);
Console.WriteLine(string.Format("Dictionary value types: {0}", String.Join(",", dto.AdditionalData.Values.Select(v => v == null ? "null" : v.GetType().ToString()))));
Assert.IsTrue(!dto.AdditionalData.Values.OfType<JToken>().Any(), "Some values were of type JToken!");
Console.WriteLine("No dictionary values were of type JToken.");
""AdditionalProp3"": ""Val3"",
""AdditionalProp4"": ""Val4"",
""AdditionalProp5"": 1010101,
""AdditionalProp6"": true,
""AdditionalProp7"": null,
""AdditionalProp8"": ""2012-03-19T07:22Z"",
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: ");
public class AssertionFailedException : System.Exception
public AssertionFailedException() : base() { }
public AssertionFailedException(string s) : base(s) { }
public static class Assert
public static void IsTrue(bool value)
public static void IsTrue(bool value, string message)
throw new AssertionFailedException(message ?? "failed");