我使用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();
@tontonsevilla,如何将oneOfs下的两个对象都返回到C#POCO中?在@user2966445的上面的例子中,它只会为我生成oneOfs下的第一个项目,我只会在POCO&不包括车辆和价格。因此,当将json取消序列化为POCO时,如果json有效载荷包含vehicle&价格
我在NJsonSchema.JsonSchema对象";解决";方法,它也调用";RemoveNullability";方法内部,该代码只返回oneOfs中的第一个项目,不确定如何绕过它。
public JsonSchema RemoveNullability( JsonSchema schema )
{
return schema.OneOf.FirstOrDefault( ( JsonSchema o ) => !o.IsNullable( SchemaType.JsonSchema ) ) ?? schema;
}