【问题标题】:CamelCase property names with NJsonSchema C# CodeGeneration使用 NJsonSchema C# CodeGeneration 的 CamelCase 属性名称
【发布时间】:2023-02-10 03:15:45
【问题描述】:
有人知道配置 NJsonSchema 以在代码生成过程中使用 CamelCase 属性命名的方法吗?我有一个 JSON 模式,其属性名称如 message_id 导致 C# 属性名称“Message_id”,其中“MessageId”应该是更像 C# 的方式。
使用像 '[JsonProperty("message_id"]' 这样的属性,指定不同名称之间的连接就没有问题了。
【问题讨论】:
标签:
.net-core
json.net
njsonschema
【解决方案1】:
因此,您询问了代码生成。我遇到了它生成的模式与发送到我的 Angular 应用程序的内容不匹配的问题。因此,虽然这不是您要找的东西,但也许它可以帮助您找到答案(也许?)。
为了使用驼峰式属性名称生成架构,我将默认属性名称处理设置为驼峰式,但这是使用已弃用的调用来直接设置这些设置。应该有一些方法可以直接使用 SerializerSettings,但我不太能够做到这一点。这不是我的生产代码,所以它会做。
internal class SchemaFileBuilder<T>
{
public static void CreateSchemaFile()
{
CreateSchemaFile(typeof(T).Name);
}
public static void CreateSchemaFile(string fileName)
{
JsonSchemaGeneratorSettings settings = new JsonSchemaGeneratorSettings();
settings.DefaultPropertyNameHandling = PropertyNameHandling.CamelCase;
var schema = NJsonSchema.JsonSchema.FromType<T>(settings);
var json = schema.ToJson();
Directory.CreateDirectory("Schemas");
File.WriteAllText($"Schemas\{fileName}.schema.json", json);
}
}
我将其设置为通用函数,因此我可以将多个模式传递给任一 createSchemaFile 函数。下面是一些示例调用,它们会生成一个 Person.schema.json 文件和一个 Persons.schema.json 文件:
SchemaFileBuilder<Person>.CreateSchemaFile();
SchemaFileBuilder<Dictionary<string, Person>>.CreateSchemaFile("Persons");