0

我正在使用 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;
    }

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

也尝试从 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, new CSharpGeneratorSettings
{
    Namespace = "GameLogic",
    ClassStyle = CSharpClassStyle.Poco
});
var codeFile = classGenerator.GenerateFile();
using (var sw = File.CreateText("Generated.cs"))
{
    sw.Write(codeFile);
}

根本没有生成类...

4

0 回答 0