我写了一个OnMethodBoundaryAspect属性来记录方法异常。
我遇到Complex方法参数问题。
方法签名是:
TestClass m_tf = new TestClass();
m_tf.DoWorkInternal(1,new Prova1(){ProvaP1 = 10,ProvaP2 = 11});
我能够跟踪int类型的第一个参数,所以我可以得到参数名称和值 但是,如何获得作为复杂对象的第二个参数的属性值?
提前致谢。 朱塞佩。
解决。
找到解决方案。
aspect方法是这样的,并以json格式写入目标方法参数:
public override void OnException(MethodExecutionArgs args)
{
base.OnException(args);
Dictionary<string, object> m_args = new Dictionary<string, object>();
for (int i = 0; i < args.Arguments.Count(); i++)
{
string name = args.Method.GetParameters()[i].Name;
object obj = args.Arguments.GetArgument(i);
m_args.Add(name, obj);
}
var output = JsonConvert.SerializeObject(m_args);
:
:
}
答案 0 :(得分:0)
虽然您可以将参数/参数数组转换为字典并且JSON将其序列化,但另一种方法是直接使用该类型找到它。
以下代码应该为您解决问题。
public override void OnException(MethodExecutionArgs args)
{
Prova1 prova1 = null;
var parameters = args.Method.GetParameters();
var arguments = args.Arguments
for (int i = 0; i < arguments.Count(); i++)
{
var param = parameters[i];
var arg = arguments[i];
if (param.ParameterType == typeof(Prova1))
{
prova1 = arg;
}
}
var output = prova1;
// Do your magic
base.OnException(args);
}
另外,请记住两件事。
System.Linq
函数应该能够清理掉这个函数。CompileTimeInitialize()
或RuntimeInitialize()
中)并重新使用该索引。