public void RecurseHierarchyAndAppendProperties(JObject typeObject)
{
var propertiesOfThisType = (JObject)typeObject["properties"];
JObject baseTypeObject = GetBaseType(typeObject);
while (baseTypeObject != null)
{
// merge properties from basetype here. you should ignore duplicate (overriden) properties as you dive into the inheritance chain
var propertiesOfBaseType = (JObject)baseTypeObject["properties"];
foreach (var kvp2 in propertiesOfBaseType)
{
string baseTypePropertyName = kvp2.Key;
var baseTypePropertyObject = (JObject)kvp2.Value;
if (propertiesOfThisType[baseTypePropertyName] == null)
{
propertiesOfThisType[baseTypePropertyName] = baseTypePropertyObject;
}
}
// get next ancestor, if any
baseTypeObject = GetBaseType(baseTypeObject);
}
}