in src/Json.Schema.ToDotNet/DataModelGenerator.cs [251:334]
internal string GenerateClass(
string className,
JsonSchema schema)
{
className = GetHintedClassName(className).ToPascalCase();
string suffixedClassName = className + _settings.TypeNameSuffix;
var propertyInfoDictionary = new PropertyInfoDictionary(
className,
_settings.TypeNameSuffix,
schema,
_settings.HintDictionary,
OnAdditionalTypeRequired);
_classInfoDictionary.Add(suffixedClassName, propertyInfoDictionary);
EnumHint enumHint = null;
InterfaceHint interfaceHint = null;
if (_settings.HintDictionary != null)
{
string key = className.ToCamelCase();
enumHint = _settings.HintDictionary.GetHint<EnumHint>(key);
interfaceHint = _settings.HintDictionary.GetHint<InterfaceHint>(key);
}
string baseInterfaceName = null;
if (interfaceHint != null)
{
baseInterfaceName = "I" + suffixedClassName;
}
TypeGenerator typeGenerator;
if (enumHint == null)
{
typeGenerator = new ClassGenerator(
propertyInfoDictionary,
schema,
_settings.HintDictionary,
baseInterfaceName,
_settings.GenerateEqualityComparers,
_settings.GenerateCloningCode,
_settings.SealClasses,
_settings.VirtualMembers,
_settings.ProtectedInitMethods,
_nodeInterfaceName,
_kindEnumName,
_settings.TypeNameSuffix);
if (_settings.GenerateCloningCode)
{
// The cloning code includes an enumeration with one member for each
// generated class, so keep track of the class names.
_generatedClassNames.Add(suffixedClassName);
}
}
else
{
typeGenerator = new EnumGenerator(schema, _settings.TypeNameSuffix, _settings.HintDictionary);
}
_pathToFileContentsDictionary[suffixedClassName] = typeGenerator.Generate(
_settings.SuffixedNamespaceName,
className,
_settings.CopyrightNotice,
schema.Description);
if (interfaceHint != null)
{
typeGenerator = new InterfaceGenerator(
propertyInfoDictionary,
schema,
_settings.TypeNameSuffix,
_settings.HintDictionary);
string description = interfaceHint.Description ?? schema.Description;
_pathToFileContentsDictionary[baseInterfaceName + _settings.TypeNameSuffix] = typeGenerator.Generate(
_settings.SuffixedNamespaceName,
baseInterfaceName,
_settings.CopyrightNotice,
description);
}
return _pathToFileContentsDictionary[suffixedClassName];
}