问题描述
我正在使用 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();
这会给我很多类的名字,比如 Anonymous
、Anonymous32
等。一些奇怪的名字。
我的方法有问题还是问题出在客户端?
编辑:我不得不将客户端的方法从 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 (将#修改为@)