有时候在处理Http请求的时候偷懒不想定义一个Model来处理,使用Dynamic来直接操作请求的数据是非常方便的
关于Dynamic的简单介绍以及使用Dynamic与Newtonsoft.Json来操作请求的数据,请参考如下文章
参考Nettonsoft.Json中的访问,同样定义一个JTextAccessor,代码如下
public class JTextAccessor : DynamicObject
{
private readonly JsonElement _content;
public JTextAccessor(JsonElement content)
{
_content = content;
}
public override bool TryGetMember(GetMemberBinder binder, out object? result)
{
result = null;
if (_content.TryGetProperty(binder.Name, out JsonElement value))
{
result = Obtain(value);
}
else return false;
return true;
}
private object? Obtain(in JsonElement element)
{
switch (element.ValueKind)
{
case JsonValueKind.String: return element.GetString();
case JsonValueKind.Null: return null;
case JsonValueKind.False: return false;
case JsonValueKind.True: return true;
case JsonValueKind.Number: return element.GetDouble();
default: break;
}
if (element.ValueKind == JsonValueKind.Array)
{
var list = new List<object>();
foreach (var item in element.EnumerateArray())
{
list.Add(Obtain(item));
}
return list;
}
// Undefine、Object
else return new JTextAccessor(element);
}
}
编写一个Controller来验证
[HttpPost]
public IActionResult Post([FromBody] dynamic value)
{
dynamic ja = new JTextAccessor(value);
string Name = ja.Name;
int Age = (int)ja.Age;
var list = ja.List;
string childName = list[0].Name;
string str = JsonSerializer.Serialize(value);
_logger.LogInformation(str);
return Ok(new
{
code = "0",
message = "成功",
reqCode = ""
});
}
设置好断点,调试
-
调试断点
-
使用postman做请求测试
-
查看调试的结果非常理想,成功偷懒省了事