• JSON Patch使用


    介绍:

    JSON Patch是一种描述JSON文档更改的格式。当只更改了一部分时,可用于避免发送整个文档。当与HTTP PATCH方法结合使用时,它允许以符合标准的方式对HTTP API进行部分更新。
    JSON Patch本身就是JSON文档。

    为什么使用JsonPatch:

    JSON Patch的一大优势在于它的请求操作体很小,只发送对象的更改内容。相对要谨慎一点,只更新请求的内容。

    比较常见有四大操作:

    Add 向 JSON 对象中添加一对 key - value,或者向 Json Array 中加个元素。
    Move 把某个节点从一个地方移到另一个地方。
    Replace 替换,比如把 city 的值从“广州”改为“珠海”。
    Remove 删除 JSON 对象中的某对 key - value,或者从 Json Array 中删除一个元素。
    copy 复制,将值从JSON文档中的一个位置复制到另一个位置。这两个from和path是JSON指针。操作:{ "op": "copy", "from": "/biscuits/0", "path": "/best_biscuit" }
    test 测试是否在文档中设置了指定的值。如果测试失败,则整个补丁都不适用。{ "op": "test", "path": "/best_biscuit/name", "value": "Choco Leibniz" }

    简单的例子

    原始文件
    {
      "baz": "qux",
      "foo": "bar"
    }
    补丁
    [
      { "op": "replace", "path": "/baz", "value": "boo" },
      { "op": "add", "path": "/hello", "value": ["world"] },
      { "op": "remove", "path": "/foo" }
    ]
    结果
    {
      "baz": "boo",
      "hello": ["world"]
    }
    

    ASP.NET Core案例

    添加nuGet包:Microsoft.AspNetCore.JsonPatch
    服务器端:

    [HttpPost("/Orders/PostTest")]
            public Dictionary<string, string> PostTest(
             [FromBody]JsonPatchDocument<IDictionary<string, string>> body
             )
            {
                Dictionary<string, string> dict = new Dictionary<string, string> { { "name", "fan" }, { "age", "18" } };
                body.ApplyTo(dict);
                return dict;
            }
    
    public string GetTest(
             [FromBody]JsonPatchDocument<User> body
             )
            {
                User u = new User();
                body.ApplyTo(u);
                return "true";
            }
    

    客户端:

    HttpClient client = new HttpClient();
                string responseText = client.PostAsync("http://localhost:7777/webapi/a1/orders/posttest", "[{"op" : "replace","path" : "/name","value" : "fanfan"},{"op" : "add","path" : "/class","value" : "333"}]", null,Encoding.UTF8).Result;
    
    //
    

    返回结果:

    {
      "name": "fanfan",
      "age": "18",
      "class": "333"
    }
    

    就是如果你的 JSON Patch 文档的 TModel 是一个类,由于 .NET 是面向对象的,你不能随便向一个类添加属性,因此,add 操作对于类是不可行的,但你可以进行 replace 操作

    参考:
    https://www.cnblogs.com/tcjiaan/p/9034869.html
    http://jsonpatch.com/

  • 相关阅读:
    当今优质男人的硬指标15条
    真正爱你的男人
    二十条人生建议
    女孩嫁人前先看看这十句话
    MM拒绝GG求爱的几种方法
    让你受用一生的爱情经典
    男女朋友们的经典称呼
    一道终身受用的测试题
    爱情,你在哪里?
    经典短篇:女人心疼男人的10种方式
  • 原文地址:https://www.cnblogs.com/fanfan-90/p/13535208.html
Copyright © 2020-2023  润新知