public void JsonCodeGenerator_WithCrossRecursive2Levels() { var root = new WithCrossRecursiveA { NameA = "Root", Recursive = new WithCrossRecursiveB { NameB = "First", Recursive = new WithCrossRecursiveA // This one cannot be shared with the root. { NameA = "Second", Recursive = new WithCrossRecursiveB // This will be created anyways with a different name (no way to know). { NameB = "Null", } } } }; var document = new JsonDocument() { DataAsJson = JsonExtensions.ToJObject(root) }; var generator = new JsonCodeGenerator("csharp"); var classTypes = generator.GenerateClassesTypesFromObject("Root", JsonExtensions.ToJObject(root)) .ToLookup(x => x.Name); Assert.Equal(4, classTypes.Count()); }
public void JsonCodeGenerator_WithCrossRecursive2LevelsGenerator() { var root = new WithCrossRecursiveA { NameA = "Root", Recursive = new WithCrossRecursiveB { NameB = "First", // RecursiveClass1 Recursive = new WithCrossRecursiveA // This one must be shared with the root. { NameA = "Second", // RecursiveClass Recursive = new WithCrossRecursiveB // This will be created anyways with a different name (no way to know). { NameB = "Null", // Recursive is going to be object (NULL) } } } }; var document = new JsonDocument() { DataAsJson = JsonExtensions.ToJObject(root) }; var generator = new JsonCodeGenerator("csharp"); var code = generator.Execute(document); Console.WriteLine(code); Assert.Contains("public class RecursiveClass", code); Assert.Contains("public class RecursiveClass1", code); Assert.Contains("public class RecursiveClass2", code); Assert.Contains("public RecursiveClass1 Recursive { get; set; }", code); Assert.Contains("public RecursiveClass2 Recursive { get; set; }", code); Assert.Contains("public object Recursive { get; set; }", code); }