我有一个JSON模式和一个类库。我能够序列化此类,然后成功转换为对象。要测试它,我创建一个随机对象,将其序列化。然后转换为对象并检查其有效性。为了确定值。
下面的代码正常工作 - 但是我想绝对确定类库代表JSON模式。
有没有办法实现这一目标?我发现一些在线工具试图从给定的架构创建类库,但是它们都没有那么有用。
// 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 });
做映射的面向测试主张的一种方法是使用fscheck生成大量随机对象,然后断言您想从它们中持有的东西:在这种情况下,
- 鉴于模式,它们的序列化是有效的,
- 可以将它们重新序列化回同一对象。(您应该确保在那里使用结构平等。)
确切地说,这种方法仅检查对象所描述的所有内容都是由架构表示的。您可能还想采取其他方式 - 每个符合架构的JSON都可以由您的对象表示。同样,您可以生成许多符合模式的JSON,并检查
- 它们可以被划分到您的对象,
- 这些对象的再依赖为您开始的JSON。
提防,这可能不切实际:FSCHECK可能对基于JSON模式的一代没有很好的一流的支持。
如果您将来会更改模式,那么有一种方法即使在应用程序的边界处也可以生成相应的对象以具有强大类型的方法真的很棒。您是否尝试过Swagger Codegen?Swagger使用JSON模式的子集描述了它的终点。相应的工具可能会帮助您。