您可以使用JSON模式验证对象。
您可以使用dynamic和expando 在运行时生成动态对象
我想做的是在运行时从JSON模式生成对象,然后根据需要填充这些对象。
如果这看起来很奇怪,原因是JSON模式将定义一个要从另一个源填充的模板,但系统允许您创建新模板。
请求的示例:
父对象
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.NetGeneration.
var schema = new JsonSchemaBuilder().FromType(myType);
你可以在文档中阅读更多关于它的信息。
我认为@gregsdennis做对了库。如果你看一下文档,它是可以做到的。
The NJsonSchema.CodeGeneration can be used to generate C# or TypeScript code from a JSON schema:
var generator = new CSharpGenerator(schema);
var file = generator.GenerateFile();
The file variable now contains the C# code for all the classes defined in the JSON schema.