public CodeGenerationResult Generate(string jsonSchema, string jsonFileName, string targetNamespace) { if (string.IsNullOrEmpty(jsonSchema)) { throw new ArgumentException("json schema was not provided", nameof(jsonSchema)); } var rootname = GetDefaultRootItemNameFromFileName(jsonFileName); var typeNameGen = new CustomTypeNameGenerator(rootname); var schema = JsonSchema4.FromJson(jsonSchema); var generator = new CSharpGenerator(schema, new CSharpGeneratorSettings() { Namespace = targetNamespace, ClassStyle = CSharpClassStyle.Poco, RequiredPropertiesMustBeDefined = false, TypeNameGenerator = typeNameGen, ArrayType = "List" }); var result = new CodeGenerationResult { Code = generator.GenerateFile() }; AddAssemblyVersionAttributes(result, targetNamespace); // this calling back to the TypeGenerator sure gives these a 'bas type/sub-type' kind of vibe. TypeGenerator.BuildGeneratedCode(result, rootname, CreateMetadataReferences()); result.RootTypeName = typeNameGen.AssignedRootTypeName; return(result); }
public CodeGenerationResult Generate(PhysicalSchema schema /* Maybe this should take a logical schema instead to help work out the root elements? */, string targetNamespace) { var code = CreateCodeNamespace(schema, targetNamespace); var provider = new Microsoft.CSharp.CSharpCodeProvider(); var sb = new StringBuilder(); using (StringWriter sw = new StringWriter(sb)) { provider.CreateGenerator().GenerateCodeFromNamespace(code.Code, sw, new CodeGeneratorOptions()); } var result = new CodeGenerationResult() { Code = sb.ToString() }; TypeGenerator.BuildGeneratedCode(result, schema.Files[0].FileName /* TODO */, CreateMetadataReferences()); result.RootTypeName = code.RootElementName; return(result); }