using System.Collections.Generic;
using Newtonsoft.Json.Converters;
public static void Main()
const string JSON = @"{'Name': 'my first story', 'ToldByUserId': 255 }";
var stroy = JsonConvert.DeserializeObject<EntityBase>(JSON, new StoryCreator());
public class EntityBase : DynamicObject
public string EntityName { get; private set; }
private readonly Dictionary<string, object> values = new Dictionary<string, object>();
public EntityBase(string entityName)
this.EntityName = entityName;
public virtual object this[string fieldname]
if (this.values.ContainsKey(fieldname))
return this.values[fieldname];
if (this.values.ContainsKey(fieldname))
this.values[fieldname] = value;
this.values.Add(fieldname, value);
public override IEnumerable<string> GetDynamicMemberNames()
return this.values.Keys.ToList();
public override bool TryGetMember(GetMemberBinder binder, out object result)
result = this[binder.Name];
public override bool TrySetMember(SetMemberBinder binder, object value)
this[binder.Name] = value;
public class StoryCreator : CustomCreationConverter<EntityBase>
public override EntityBase Create(Type objectType)
return new EntityBase("Stroy");