C# ActionExecutedContext 怎么把返回的值转为对应的对象,在未知对象类型情况下
时间: 2024-03-12 07:47:16 浏览: 20
在未知对象类型的情况下,可以使用 `dynamic` 类型来代替具体的对象类型,以便在运行时动态地确定对象类型。具体实现代码如下:
```
public override void OnActionExecuted(ActionExecutedContext context)
{
if (context.Result is ObjectResult objectResult)
{
var result = objectResult.Value; // 获取返回值
var json = JsonConvert.SerializeObject(result); // 将返回值序列化为 JSON 字符串
dynamic obj = JsonConvert.DeserializeObject(json); // 将 JSON 字符串转换为 dynamic 类型的对象
// ...
// 使用 obj 对象,可以使用动态类型的特性,如属性访问、方法调用等
}
}
```
其中,`dynamic` 类型是 C# 4.0 中新增的类型,它是一种动态类型,可以在运行时动态地确定对象类型,从而实现更灵活的编程。需要注意的是,使用 `dynamic` 类型会带来一些运行时的性能开销,因此应该谨慎使用。
相关问题
C# ActionExecutedContext 怎么把返回的值转为对应的对象
在 ASP.NET Web API 中,可以通过以下方式将返回值转换为对应的对象:
1. 使用 Newtonsoft.Json 库将返回值序列化为 JSON 字符串;
2. 使用 JsonConvert.DeserializeObject<T> 方法将 JSON 字符串转换为对应的对象。
具体实现代码如下:
```
public override void OnActionExecuted(ActionExecutedContext context)
{
if (context.Result is ObjectResult objectResult)
{
var result = objectResult.Value; // 获取返回值
var json = JsonConvert.SerializeObject(result); // 将返回值序列化为 JSON 字符串
var obj = JsonConvert.DeserializeObject<MyObject>(json); // 将 JSON 字符串转换为对应的对象
// ...
}
}
```
其中,`MyObject` 为对应的对象类型。
C#ActionExecutedContext 获取方法的参数并转为对象
可以通过 `ActionDescriptor` 对象获取方法的参数信息,然后通过 `ValueProvider` 对象获取参数的值,最后将参数值转换为对象。以下是一个示例代码:
```csharp
public override void OnActionExecuted(ActionExecutedContext context)
{
var actionDescriptor = context.ActionDescriptor as ControllerActionDescriptor;
var parameters = actionDescriptor?.MethodInfo.GetParameters();
if (parameters != null && parameters.Any())
{
var arguments = new Dictionary<string, object>();
foreach (var parameter in parameters)
{
var valueProvider = context.ValueProvider.GetValue(parameter.Name);
if (valueProvider != ValueProviderResult.None)
{
arguments[parameter.Name] = valueProvider.FirstValue;
}
}
var obj = Activator.CreateInstance(actionDescriptor.ControllerTypeInfo, arguments.Values.ToArray());
// obj 就是转换后的对象
}
}
```
这里假设方法的参数名称与对象的属性名称一致,如果不一致可以通过配置文件或者其他方式进行映射。