微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

NJsonSchema C#-更改生成的值类型

如何解决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 举报,一经查实,本站将立刻删除。