protected CouchDocument AutoClone()
{
var doc = GetType().GetConstructor(Type.EmptyTypes).Invoke(new object[0]) as CouchDocument;
var properties = GetType().GetProperties(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
var fields = GetType().GetFields(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
foreach (var field in fields)
field.SetValue(doc, field.GetValue(this));
foreach (var prop in properties)
if (!prop.CanWrite || prop.GetIndexParameters().Length > 0)
continue;
else
prop.SetValue(doc, prop.GetValue(this, null), null);
return doc;
}