我有一个JSON Schema和一个类库。 我能够序列化这个类,然后成功转换回对象。 为了测试它,我创建了一个随机对象,序列化它。 然后转换为对象并检查其有效性。 并且反序列化它只是为了确定值。
下面的代码完美无缺 - 但是 我想绝对确定类库代表Json Schema。
有没有办法实现这个目标?我发现一些在线工具试图从给定的模式创建类库,但它们都没有那么有用。
// Create random object.
MyObject myObject = new MyObject().CreateRandomMyObject();
// Serialize it.
string JSONObjectText = JsonConvert.SerializeObject(myObject);
// Check if schema is valid.
JSchema schema = JSchema.Parse(txtSchema.Value);
// Check if the serialized object is valid for schema.
JObject jsonObject = JObject.Parse(JSONObjectText);
IList<string> errorMessages;
bool valid = jsonObject.IsValid(schema, out errorMessages);
// Check if the serialized object can be deserialized.
MyObject myObjectReDeserialized = (MyObject)JsonConvert.DeserializeObject(JSONObjectText, typeof(MyObject), new JsonSerializerSettings() { MissingMemberHandling = MissingMemberHandling.Error });
答案 0 :(得分:2)
一种对映射进行面向测试的断言的方法是使用FsCheck生成大量随机对象,然后断言你想要保留它们的内容:在这种情况下,
确切地说,此类方法仅检查对象描述的所有内容是否可由模式表示。您可能还想以另一种方式执行 - 符合架构的每个JSON都可以由您的对象表示。同样,您可以生成许多符合模式的可能JSON并检查
请注意,这可能不实用:FsCheck可能没有一些不错的,一流的支持基于JSON模式的开箱即用。
如果您将来的模式将会发生变化,那么即使在the boundary of your application,也可以通过某种方式生成相应的对象以获得强类型。你试过Swagger Codegen吗? Swagger使用JSON Schema的子集描述它的端点。相应的工具可能会对您有所帮助。