HttpClient来自官方的JSON扩展方法
程序员文章站
2022-05-18 17:13:56
System.Net.Http.Json Json的序列化和反序列化是我们日常常见的操作,通过 System.Net.Http.Json 我们可以用少量的代码实现上述操作.正如在github设计文档中所描述 Serializing and deserializing JSON payloads fr ......
system.net.http.json
json的序列化和反序列化是我们日常常见的操作,通过system.net.http.json我们可以用少量的代码实现上述操作.正如在github设计文档中所描述
serializing and deserializing json payloads from the network is a very common operation for clients, especially in the upcoming blazor environment. right now, sending a json payload to the server requires multiple lines of code, which will be a major speed bump for those customers. we'd like to add extension methods on top of httpclient that allows doing those operations with a single method call.
他的依赖项也非常的少目前只依赖system.net.http, system.text.json
system.text.json相对于newtonsoftjson平均快了两倍,如果有兴趣相关基准测试可在这个文章中查阅
在.net中安装和使用
目前它还是预览版本
dotnet add package system.net.http.json
public static async task<customer> getcustomerasync() { httpclient clinet=new httpclient(); var request = new httprequestmessage(httpmethod.get, "http://localhost:5000/customers"); var response = await clinet.sendasync(request); return await response.content.readfromjsonasync<customer>(); }
通过readfromjsonasync直接可以反序列化
public static async task<customer> createcustomerasync() { httpclient clinet = new httpclient(); var customer=new customer() { id = "1", name = "fh" }; var request = new httprequestmessage(httpmethod.post, "http://localhost:5000/create"); request.content = jsoncontent.create(customer); var response = await clinet.sendasync(request); var content=response.content.readasstringasync(); return customer; }
还可以以下面这种简洁方式使用
_client.getfromjsonasync<ireadonlylist<customer>>("/customers"); _client.getfromjsonasync<customer?>($"/customers/{id}"); _client.putasjsonasync($"/customers/{customerid}", customer);
if (response.issuccessstatuscode) { try { return await response.content.readfromjsonasync<user>(); } catch (notsupportedexception) // when content type is not valid { console.writeline("the content type is not supported."); } catch (jsonexception) // invalid json { console.writeline("invalid json."); } }
还可以通过notsupportedexception和jsonexception异常类处理相应的异常.
reference
https://github.com/hueifeng/blogsample/tree/master/src/systemnethttpjson