C# 通过Dynamic访问System.Text.Json对象

有时候在处理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 = ""
              });
}

设置好断点,调试

  • 调试断点
    C# 通过Dynamic访问System.Text.Json对象

  • 使用postman做请求测试
    C# 通过Dynamic访问System.Text.Json对象

  • 查看调试的结果非常理想,成功偷懒省了事
    C# 通过Dynamic访问System.Text.Json对象

C# 通过Dynamic访问System.Text.Json对象

上一篇:解决GPG error: The following signatures couldn't be verified because the public key is not available


下一篇:【WPF】WPF ScorllView触摸滚动实现