Skip to content

Instantly share code, notes, and snippets.

@Encosia
Created July 15, 2011 03:43
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Encosia/6cfcdfdf2a117fa5e81b to your computer and use it in GitHub Desktop.
Save Encosia/6cfcdfdf2a117fa5e81b to your computer and use it in GitHub Desktop.
Make JavaScriptSerializer serialize ExpandoObject less like a sociopath.
void Main()
{
dynamic foo = new ExpandoObject();
foo.name = "Conery";
foo.company = "TekPub";
foo.today = DateTime.Now;
var jss = new JavaScriptSerializer();
jss.RegisterConverters(new JavaScriptConverter[] { new ExpandoObjectConverter() });
Console.Write(jss.Serialize(foo));
}
public class ExpandoObjectConverter : JavaScriptConverter
{
public override IEnumerable<Type> SupportedTypes
{
get { return new ReadOnlyCollection<Type>(new List<Type>(new Type[] { typeof(ExpandoObject) })); }
}
public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer)
{
ExpandoObject expando = (ExpandoObject)obj;
if (expando != null)
{
// Create the representation.
Dictionary<string, object> result = new Dictionary<string, object>();
foreach (KeyValuePair<string, object> item in expando)
{
if (item.Value.GetType() == typeof(DateTime))
result.Add(item.Key, ((DateTime)item.Value).ToShortDateString());
else
result.Add(item.Key, item.Value.ToString());
}
return result;
}
return new Dictionary<string, object>();
}
public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer)
{
return null;
}
}
@Encosia
Copy link
Author

Encosia commented Oct 25, 2011

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment