c# - C# 类到带有 ID 的 json 模式
问题描述
我有 C# 课。我尝试使用 newtonsoft 库生成 json 模式。
JsonSchemaGenerator generator = new JsonSchemaGenerator();
generator.UndefinedSchemaIdHandling = UndefinedSchemaIdHandling.UseTypeName;
JsonSchema schema = generator.Generate(typeof(MyClass));
此代码生成 json 模式。但它不会为最低级别的属性生成 Id 字段。
如何获取架构中所有属性的 ID?
解决方案
如果没有示例代码和输出,就需要对最低级别的意思进行猜测。我假设您指的是私有变量。如果您正在创建类,则可以使用 [JsonProperty] 属性标记私有变量以包含它。
TestSchema.GetSchema();
编码
public class TestSchema
{
public static void GetSchema()
{
//using Newtonsoft.Json;
//using Newtonsoft.Json.Schema;
//using Newtonsoft.Json.Schema.Generation;
//using Newtonsoft.Json.Serialization;
JSchemaGenerator generator = new JSchemaGenerator();
//Generator settings
generator.GenerationProviders.Add(new StringEnumGenerationProvider());
generator.DefaultRequired = Required.Default;
generator.SchemaLocationHandling = SchemaLocationHandling.Inline;
generator.SchemaReferenceHandling = SchemaReferenceHandling.All;
generator.SchemaIdGenerationHandling = SchemaIdGenerationHandling.TypeName;
generator.ContractResolver = new CamelCasePropertyNamesContractResolver();
//Kratos
JSchema schema = generator.Generate(typeof(Kratos));
string json = schema.ToString();
System.Diagnostics.Debug.WriteLine(json);
//Person
schema = generator.Generate(typeof(Person));
json = schema.ToString();
System.Diagnostics.Debug.WriteLine(json);
}
}
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
private string hidden { get; set; }
}
public class Kratos
{
[JsonProperty(Required = Required.Always)]
public static string Title = "God of War";
public static string notIncluded = "Boo hoo";
[JsonProperty(Required = Required.Always)]
public const bool bWillHaveRevenge = true;
//Yes
public string mainWeapon = "Blades of Exile";
[JsonProperty(Required = Required.Always)]
private int nLivingFamily = 0;
public GodsOfOlympus TopPriority = GodsOfOlympus.Zeus;
public GodsOfOlympus KillableGods { get { return GodsOfOlympus.ALLTHEGODS; } }
[JsonProperty]
private GodsOfOlympus DefeatedGods = GodsOfOlympus.Poseidon | GodsOfOlympus.Hades;
[Flags]
public enum GodsOfOlympus : byte
{
Zeus = 0x1,
Hades = 0x2,
Poseidon = 0x4,
Athena = 0x8,
Hermes = 0x10,
Helios = 0x20,
Hera = 0x40,
Aphrodite = 0x80,
ALLTHEGODS = Zeus | Hades | Poseidon | Athena | Hermes | Helios | Hera | Aphrodite
}
public Kratos()
{
System.Diagnostics.Debug.WriteLine("KRAAAATOOOOSSS");
}
}
就个人而言,如果您确实需要在类中列出私有变量,我会使用 System.Reflection
//using System.Reflection;
FieldInfo[] KratosFields = typeof(Kratos).GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static);
foreach (FieldInfo fi in KratosFields)
{
System.Diagnostics.Debug.WriteLine("[" + fi.MemberType.ToString() + "]" + fi.Name + "::" + fi.FieldType.Name);
}
PropertyInfo[] KratosProps = typeof(Kratos).GetProperties(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static);
foreach (PropertyInfo pi in KratosProps)
{
System.Diagnostics.Debug.WriteLine("[" + pi.MemberType.ToString() + "]" + pi.Name + "::" + pi.PropertyType.Name);
}
推荐阅读
- google-sitelink-searchbox - 关于在品牌网站中生成附加链接搜索框
- javascript - 未捕获的 TypeError:初始化 Materialize 自动完成时 this.dropdownEl 为空
- webpack - 如何在 webpack 5. splitchunks.cacheGroup 中使用 ChunkGraph API?
- hash - Ada.Containers.Indefinite_Hashed_Maps 中类范围键的哈希
- reactjs - Visual Studio React Typescript webpack-dev-server 热重载不适用于组件更改
- c# - 来回切换视图时 WPF 自定义大小观察器不起作用
- c++ - 没有创建 erl_crash.dump 的 NIF 分段错误但是代码在没有 NIF 的情况下正常运行时工作正常
- php - 未捕获的 InvalidArgumentException:向 Google 日历进行身份验证时 json 令牌无效
- r - dcast 函数在 rstudio 的子集中给出错误
- flutter - 如何将listView.builder索引传递给flutter中的自定义小部件的参数