Skip to content

Instantly share code, notes, and snippets.

@remcoros
Created February 2, 2012 13:26
Show Gist options
  • Save remcoros/1723468 to your computer and use it in GitHub Desktop.
Save remcoros/1723468 to your computer and use it in GitHub Desktop.
ClayJsonConverter
public class ClayJsonConverter : JsonConverter
{
public override bool CanRead
{
get
{
// TODO: read Clay objects
return false;
}
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
var clay = (IClayBehaviorProvider)value;
// Parse Clay Array
var e = ((dynamic)value).GetEnumerator();
if (e != null && e.MoveNext())
{
writer.WriteStartArray();
do
{
serializer.Serialize(writer, e.Current);
} while (e.MoveNext());
writer.WriteEndArray();
}
var members = new Dictionary<string, object>();
clay.Behavior.GetMembers(() => null, clay, members);
var memberKeys = members.Keys.Where(key => !key.StartsWith("_")).ToList();
if (memberKeys.Count > 0)
{
writer.WriteStartObject();
foreach (var key in memberKeys)
{
writer.WritePropertyName(key);
serializer.Serialize(writer, members[key]);
}
writer.WriteEndObject();
}
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override bool CanConvert(Type objectType)
{
return typeof(Clay).IsAssignableFrom(objectType);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment