首页 > Windows开发 > 详细

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

时间:2020-12-02 20:01:14      阅读:582      评论:0      收藏:0      [点我收藏+]

有时候在处理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做请求测试
    技术分享图片

  • 查看调试的结果非常理想,成功偷懒省了事
    技术分享图片

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

原文:https://www.cnblogs.com/linxmouse/p/14075049.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!