using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Collections.ObjectModel;
using System.Runtime.Serialization;
using System.ComponentModel;
using System.Globalization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Collections.Specialized;
using System.Web.Routing;
using System.Runtime.InteropServices;
using System.Text.RegularExpressions;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization;
using System.Web.SessionState;
public class FilteredExpandoObjectConverter : ExpandoObjectConverter
public override bool CanWrite { get { return true; } }
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
var expando = (IDictionary<string, object>)value;
.Where(p => !(p.Value is System.Delegate))
.ToDictionary(p => p.Key, p => p.Value);
serializer.Serialize(writer, dictionary);
public string TestClassValue { get; set; }
public static void Main()
Console.WriteLine("Json.NET version: " + typeof(JsonSerializer).Assembly.FullName);
dynamic subExpando = new ExpandoObject();
subExpando.func = (Action)(() => {});
subExpando.list = Enumerable.Range(0, 3).ToList();
subExpando.query = Enumerable.Range(0, 3);
subExpando.testClass = new TestClass { TestClassValue = "TestClass Value" };
dynamic expando = new ExpandoObject();
expando.subExpandoList = new object [] { subExpando };
expando.func = (Action)(() => {Console.WriteLine("hello");});
expando.time = DateTime.Today;
var formatting = Formatting.Indented;
var serializerSettings = new JsonSerializerSettings
Converters = { new FilteredExpandoObjectConverter() },
var json = JsonConvert.SerializeObject(expando, formatting, serializerSettings);
Console.WriteLine("Filtered expando: ");
Console.WriteLine("Unfiltered expando: ");
Console.WriteLine(JsonConvert.SerializeObject(expando, Formatting.Indented));
Console.WriteLine("Failed to serialize unfiltered expando: " + ex.Message);