Yeah I've got something along those lines, where the fields are defined in a json generated by our game executable. It's not too difficult to create your own SchemaLoader, and basically create a PropertyDescriptorCollection for the type and AttributeInfos for all the properties.
Looks like this, where ProcessPropertyMetadata loads and processes that json file. Here, it's loading our Item information. I'm later going to make it more generic to load arbitrary types of data. Item.Type is a static DomNodeType:
List<AttributePropertyDescriptor> descriptors = new List<AttributePropertyDescriptor>();
// Load the list of item properties.
ProcessPropertyMetadata(descriptors, categoryMappings, "ItemData", "");
Item.Type.SetTag(new PropertyDescriptorCollection(descriptors.ToArray()));
foreach (var descriptor in descriptors)
{
Item.Type.Define(descriptor.AttributeInfo);