using System.Collections.Generic;
using System.Diagnostics;
using Newtonsoft.Json.Linq;
public static void Main()
""Profile.Guestbook.Post"": {
""DigestSchedule"": ""00 * * * * *""
""Profile.MediaEntry.Post"": {
""DigestSchedule"": ""00 * * * * *""
var prefs = JsonConvert.DeserializeObject<Preferences>(json);
Console.WriteLine("Prefs:");
Console.WriteLine(ObjectDumper.Dump(prefs));
Console.WriteLine("\n\nTesting:");
Assert.That(prefs.Notifications[0].EventName, Is.EqualTo("Profile.Guestbook.Post"));
Assert.That(prefs.Notifications[0].TargetIntId, Is.EqualTo(1));
Assert.That(prefs.Notifications[0].Digest, Is.EqualTo(true));
Assert.That(prefs.Notifications[1].EventName, Is.EqualTo("Profile.MediaEntry.Post"));
Assert.That(prefs.Notifications[1].TargetIntId, Is.EqualTo(1));
Assert.That(prefs.Notifications[1].Digest, Is.EqualTo(true));
[JsonConverter(typeof(NotificationsConverter))]
public List<NotificationInfo> Notifications { get;set; }
public class NotificationInfo
public string EventName { get;set; }
public int TargetIntId { get;set; }
public bool Digest { get;set; }
public class NotificationsConverter : JsonConverter
public override bool CanConvert(Type objectType)
return objectType == typeof(List<NotificationInfo>);
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
var array = JArray.Load(reader);
return array.Children<JObject>()
.SelectMany(jo => jo.Properties())
.Select(jp => new NotificationInfo
TargetIntId = (int)jp.Value["TargetIntId"],
Digest = (bool)jp.Value["Digest"]
public override bool CanWrite
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
throw new NotImplementedException();