如何解决NJsonSchema C#-更改生成的值类型
我正在使用njsonSchema CsharpGenerator 10.1.24,并具有用于生成POCO的以下架构:
"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#类的价格类型为decimal
,而不是默认的double
?
public double Price { get; set;}
我尝试使用具有生成器设置JsonSerializerSettingsTransformationMethod
属性的自定义静态方法,但未进行任何更改。
解决方法
您可以尝试一下
创建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();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。