NJsonSchema C#-更改生成的值类型
我正在使用NJsonSchema CsharpGenerator 10.1.24,并使用以下模式生成POCO:NJsonSchema C#-更改生成的值类型,c#,njsonschema,C#,Njsonschema,我正在使用NJsonSchema CsharpGenerator 10.1.24,并使用以下模式生成POCO: "description": "schema validating people and vehicles", "$schema": "http://json-schema.org/draft-04/schema#", "type": "object&
"description": "schema validating people and vehicles",
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"required": [ "oneOf" ],
"properties": { "oneOf": [
{
"firstName": {"type": "string"},
"lastName": {"type": "string"},
"sport": {"type": "string"}
},
{
"vehicle": {"type": "string"},
"price":{"type": "number"}
}
]
}
}
如何使生成的C#类的price类型为decimal
而不是默认的double
公共双价{get;set;}
我尝试对generator settingsJsonSerializerSettingsTransformationMethod
属性使用自定义静态方法,但没有任何更改。您可以尝试此方法
创建CustomTypeResolver
public class CustomTypeResolver : CSharpTypeResolver
{
...
public override string Resolve(JsonSchema schema, bool isNullable, string typeNameHint)
{
if (schema == null)
{
throw new ArgumentNullException(nameof(schema));
}
schema = GetResolvableSchema(schema);
if (schema == ExceptionSchema)
{
return "System.Exception";
}
var type = schema.ActualTypeSchema.Type;
if (type.HasFlag(JsonObjectType.Number))
{
return isNullable ? "decimal?" : "decimal"; ;
}
return base.Resolve(schema, isNullable, typeNameHint);
}
...
}
生成类
var jsonSchema = File.ReadAllText("json1.json");
var schema = JsonSchema.FromJsonAsync(jsonSchema).GetAwaiter().GetResult();
var settings = new CSharpGeneratorSettings();
var typeResolver = new CustomTypeResolver(settings);
var generator = new CSharpGenerator(schema, settings, typeResolver);
var code = generator.GenerateFile();
给它一个“decimal”格式,而不改变模式。