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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM