如何确保类库完美地表示Json Schema
问题描述:
我有一个JSON Schema和一个类库。 我可以序列化这个类,然后成功转换回对象。 为了测试它,我创建了一个随机对象,将其序列化。 然后转换为对象并检查其有效性。 并反序列化它只是为了确保值。如何确保类库完美地表示Json Schema
下面的代码完美的作品 - 但 我想是绝对肯定的类库表示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都可由您的对象表示。同样,你可以生成符合模式的许多可能JSONs并检查
- 它们可以反序列化到你的对象,
- 这些对象的reserialization给你,你开始用相同的JSON。
要小心的是,这可能是不实际的:FsCheck可能没有对JSON架构基于新一代一些不错的,一流的支持外的开箱。
如果您拥有的模式将来会发生变化,那么即使在the boundary of your application也有一种方法可以生成相应的对象,使其具有较强的类型,这将非常棒。你有没有试过Swagger Codegen? Swagger描述了使用JSON模式子集的端点。相应的工具可能会对您有所帮助。
您可以复制你的字符串JSON和过去,它在C#类。 – SeM
@SeM我不明白。是的,我可以将字符串转换为对象。我想要的是确保“JsonSchema = Class Library”。 –