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();

@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; 
}

相关内容

  • 没有找到相关文章

最新更新