我们有这个json架构草案.我想得到我的JSON数据样本并为JSON模式生成一个框架,我可以手动返工,添加描述,必需等内容,这些内容不能从具体示例中获取.
例如,从我的输入example.json:
{
"foo": "lorem",
"bar": "ipsum"
}
Run Code Online (Sandbox Code Playgroud)
我会运行我的json_schema_generator工具,并得到:
{ "foo": {
"type" : "string",
"required" : true,
"description" : "unknown"
},
"bar": {
"type" : "string",
"required" : true,
"description" : "unknown"
}
}
Run Code Online (Sandbox Code Playgroud)
此示例已手动编码,因此可能存在错误.是否有任何工具可以帮助我转换JSON - > JSON模式?
想象一下以下内容
T型有一个现场公司.执行以下方法时,它完美地工作:
Type t = typeof(T);
t.GetProperty("Company")
Run Code Online (Sandbox Code Playgroud)
以下调用我得到了null
Type t = typeof(T);
t.GetProperty("company", BindingFlags.IgnoreCase)
Run Code Online (Sandbox Code Playgroud)
有人有个主意吗?
受到SO问题的启发.Attribute类对IsDefined()方法有几个重载.涵盖的是应用于Assembly,Module,MemberInfo,ParameterInfo的属性.MemberInfo重载包括PropertyInfo,FieldInfo,EventInfo,MethodInfo,ConstructorInfo.
这需要处理大多数AttributeTargets.除了一个biggy:Attribute.IsDefined(Type,Type)没有重载,因此您可以检查是否在类上定义了属性.或者结构,委托或枚举.
并非这是一个真正的问题,Type.GetCustomAttributes()可以解决这个问题.但是所有的BlahInfo类型都有这个.我不知道缺乏对称性.我无法理解为什么这对Type来说会有问题.猜测遗传问题并没有向我解释.在混合中使用ValueType可能是一个领先者,但仍然没有意义.我不买"他们忘了",他们从不这样做.
为什么这个过载丢失了?
我有一个代码块,将类型序列化为Html标记.
Type t = typeof(T); // I pass <T> in as a paramter, where myObj is of type T
tagBuilder.Attributes.Add("class", t.Name);
foreach (PropertyInfo prop in t.GetProperties())
{
object propValue = prop.GetValue(myObj, null);
string stringValue = propValue != null ? propValue.ToString() : String.Empty;
tagBuilder.Attributes.Add(prop.Name, stringValue);
}
Run Code Online (Sandbox Code Playgroud)
这个伟大的工程,但我希望它只是对基本类型,像这样做int,double,bool等,以及其他类型的不是原始的,但可以很容易地连载一样string.我希望它忽略列表和其他自定义类型之类的所有内容.
任何人都可以建议我这样做吗?或者我是否需要指定我想要允许的类型并打开属性的类型以查看是否允许它?这有点乱,所以如果我有一个更整洁的方式会很好.
我有以下课程:
public class Test {
public static int a = 0;
public int b = 1;
}
Run Code Online (Sandbox Code Playgroud)
是否可以使用反射来获取静态字段列表?我知道我可以获得所有字段的数组Test.class.getDeclaredFields().但似乎没有办法确定Field实例是否代表静态字段.
我一直听说有关添加到JVM的所有新酷功能,其中一个很酷的功能是invokedynamic.我想知道它是什么以及它如何使Java中的反射编程更容易或更好?
对于给定的类,我希望有跟踪功能,即我想记录每个方法调用(方法签名和实际参数值)和每个方法退出(只是方法签名).
我如何做到这一点假设:
为了使问题更具体,让我们假设有3个类:
public class Caller
{
public static void Call()
{
Traced traced = new Traced();
traced.Method1();
traced.Method2();
}
}
public class Traced
{
public void Method1(String name, Int32 value) { }
public void Method2(Object object) { }
}
public class Logger
{
public static void LogStart(MethodInfo method, Object[] parameterValues);
public static void LogEnd(MethodInfo method);
}
Run Code Online (Sandbox Code Playgroud)
如何调用Logger.LogStart和Logger.LogEnd每次调用方法1和方法2,而无需修改Caller.Call方法,没有明确地加入调用Traced.Method1和Traced.Method2?
编辑:如果我允许稍微更改Call方法,会有什么解决方案?
也许使用动态模式?你可以使用dynamic关键字调用任何方法/属性,对吗?例如,如何在调用myDynamicObject.DoStuff()之前检查方法是否存在?
给定一个Python类的字符串,例如my_package.my_module.MyClass,加载它的最佳方法是什么?
换句话说,我正在寻找Class.forName()Java中的等效函数,Python中的函数.它需要在Google App Engine上运行.
最好这是一个函数,它接受类的FQN作为字符串,并返回对类的引用:
my_class = load_class('my_package.my_module.MyClass')
my_instance = my_class()
Run Code Online (Sandbox Code Playgroud) reflection ×10
c# ×6
.net ×2
java ×2
aop ×1
bindingflags ×1
field ×1
getproperty ×1
json ×1
jsonschema ×1
methods ×1
properties ×1
python ×1
static ×1
validation ×1