c# - C# 中 JSONSchema 的运行时对象
问题描述
您可以使用 JSON 模式验证对象。
您可以在运行时使用 dynamic 和 expanddo 生成动态对象
我想做的是在运行时从 JSON 模式生成对象,然后可以根据需要进行填充。
如果这看起来很奇怪,原因是 JSON Schema 将定义一个从另一个源填充的模板,但系统允许您创建新模板。
根据要求示例:
父对象
public class Parent
{
public Guid Id { get; set; }
public string Name { get; set; }
public int IntValue { get; set; }
public decimal DecimalValue { get; set; }
public double DoubleValue { get; set; }
public float FloatValue { get; set; }
public DateTime DateTimeValue { get; set; }
[EnumDataType(typeof(EnumData))]
public string EnumValue { get; set; }
public List<Child> children { get; set; }
}
public enum EnumData
{
Alpha,
Beta,
Charlie
}
子对象
public class Child
{
public Guid ParentId { get; set; }
public string ChildName { get; set; }
public int ChildInt { get; set; }
}
生成的 JSON 架构
{
"type": "object",
"properties": {
"Id": {
"type": "string"
},
"Name": {
"type": [
"string",
"null"
]
},
"IntValue": {
"type": "integer"
},
"DecimalValue": {
"type": "number"
},
"DoubleValue": {
"type": "number"
},
"FloatValue": {
"type": "number"
},
"DateTimeValue": {
"type": "string",
"format": "date-time"
},
"EnumValue": {
"type": [
"string",
"null"
],
"enum": [
"Alpha",
"Beta",
"Charlie"
]
}
},
"required": [
"Id",
"Name",
"IntValue",
"DecimalValue",
"DoubleValue",
"FloatValue",
"DateTimeValue",
"EnumValue"
]
}
模式是对象的定义。如果此定义是由用户选择他们想要的属性、类型、可接受的值等创建的,则可以生成模式。
如果您随后可以从此模式创建对象的实例,则可以填充属性。
关键是在编码时不会知道该类。
这样做的原因是我们有一个庞大的通用数据集,我们需要从中创建更小的数据集,用户可以从应用程序内部定义这些数据集的内容。他们创建的定义可以存储并再次使用。
解决方案
您可以使用我的新库JsonSchema.Net.Generation来做到这一点。
var schema = new JsonSchemaBuilder().FromType(myType);
您可以在 docs中阅读有关它的更多信息。
推荐阅读
- postgis - 查找适合主折线的折线列表 - 巴士路线和自行车道
- django - Rel.to 在 Django 2.0 中已弃用
- c++ - 使用 Clang / OLLVM 在 Linux 上交叉编译 helloworld Windows 可执行文件时出现问题
- regex - 在括号+静态文本中提取值的正则表达式命令是什么?
- spring - Spring Boot (v2.3.1):Spring Batch 将数据从一个步骤传递到另一个步骤
- snowflake-cloud-data-platform - C# 雪花命令
- javascript - 如何使用 vue.js 中的单击事件从数据表中删除行而不干扰计算函数
- excel - 将单元格设置为静态值或数据验证列表,具体取决于另一个单元格
- python - 如何使用 python 使我的网站无法访问
- powershell - 使用 powershell 调用表达式运行代码输出