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

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&

我正在使用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#类的price类型为
decimal
而不是默认的
double

公共双价{get;set;}

我尝试对generator settings
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();

给它一个“decimal”格式,而不改变模式。