C#:在 NJsonSchema 中将模式合并为一个模式不起作用

问题描述

我正在使用 njsonSchema 包来生成一些需要由不同客户端使用的类的架构,但由于某种原因,将所有架构合并为一个完整的架构并没有按预期工作。下面是为所有类型创建一个单一架构的方法

    public static JsonSchema GetGameLogicModelSchema()
    {
        var listofTypes = new List<Type>();
        
        listofTypes.AddRange(Assembly.GetAssembly(typeof(FixtureParameters)).GetTypes().Where(x => x.IsSubclassOf(typeof(FixtureParameters))));
        listofTypes.AddRange(Assembly.GetAssembly(typeof(scoreinformation)).GetTypes().Where(x => x.IsSubclassOf(typeof(scoreinformation))));
        listofTypes.AddRange(Assembly.GetAssembly(typeof(Statusinformation<,>)).GetTypes().Where(x => x.IsSubclassOf(typeof(Statusinformation<,>))));

        var schema = new JsonSchema
        {
            AllowAdditionalItems = true,AllowAdditionalProperties = true
        };
        
        var children = listofTypes.Select(t => JsonSchema.FromType(t,new JsonSchemaGeneratorSettings
        {
            FlattenInheritanceHierarchy = true,SerializerSettings = new JsonSerializerSettings
            {
                Converters =
                {
                    new StringEnumConverter()
                }
            }
        }));


        foreach (var jsonSchema in children)
        {
            schema.Items.Add(jsonSchema);
        }

        return schema;
    }

我只是使用 ToJson 方法将该架构转换为 JSON。根据我的理解,模式本身看起来不错,有所有定义等。但是当我将它复制粘贴到 here 时,它给了我一个包含所有类的所有属性的类,它只是一个带有归档和属性,不像我的代码中那样有很多类。

也尝试从 VS 做如下描述:

var text = File.ReadAllTextAsync("Files/Data.json").Result;
var schemaFromFile = JsonSchema.FromSampleJson(text);
var path = Path.GetFullPath("GameLogic");

var classGenerator = new CSharpGenerator(schemaFromFile,new CSharpGeneratorSettings
{
    Namespace = "GameLogic",SchemaType = SchemaType.JsonSchema,Classstyle = CSharpClassstyle.Poco
});
var codeFile = classGenerator.GenerateFile();

这会给我很多类的名字,比如 AnonymousAnonymous32 等。一些奇怪的名字。

我的方法有问题还是问题出在客户端?


编辑:我不得不将客户端的方法JsonSchema.FromSampleJson(text) 改为使用 JsonSchema.FromFileAsync(path).Result,但现在我只得到一个空结果:

var path = Path.GetFullPath("Files/Data.json");
var schemaFromFile = JsonSchema.FromFileAsync(path).Result;

var classGenerator = new CSharpGenerator(schemaFromFile,Classstyle = CSharpClassstyle.Poco
});
var codeFile = classGenerator.GenerateFile();
using (var sw = File.CreateText("Generated.cs"))
{
    sw.Write(codeFile);
}

根本没有生成类...

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)