2017-09-29 47 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模式子集的端點。相應的工具可能會對您有所幫助。