2017-09-29 19 views
1

我有一个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 }); 
+0

您可以复制你的字符串JSON和过去,它在C#类。 – SeM

+0

@SeM我不明白。是的,我可以将字符串转换为对象。我想要的是确保“JsonSchema = Class Library”。 –

回答

2

做你映射的应试断言方法是使用FsCheck生成大量随机对象,然后断言你想从他们持什么样的:在这种情况下,

  • 它们的序列化是有效的给予模式,
  • 它们可以反序列化回同一个对象。 (你应该确保你在那里使用结构相等。)

确切地说,这种方法只检查你的对象描述的所有东西都可以被模式表示。您可能还想以其他方式执行 - 符合架构的每个JSON都可由您的对象表示。同样,你可以生成符合模式的许多可能JSONs并检查

  • 它们可以反序列化到你的对象,
  • 这些对象的reserialization给你,你开始用相同的JSON。

要小心的是,这可能是不实际的:FsCheck可能没有对JSON架构基于新一代一些不错的,一流的支持外的开箱。

如果您拥有的模式将来会发生变化,那么即使在the boundary of your application也有一种方法可以生成相应的对象,使其具有较强的类型,这将非常棒。你有没有试过Swagger Codegen? Swagger描述了使用JSON模式子集的端点。相应的工具可能会对您有所帮助。