C# 调用API时重复反序列化和序列化-有更好的方法吗?
我正在开发一个网站和一个API来为it数据提供服务,我注意到我当前的过程涉及在进行API调用时重复序列化和反序列化相同的数据。我想知道是否有更好的方法来处理事情。网站和API都是使用ASP.NETCore2.0用C#编写的 我目前的程序如下: 1) 最终用户加载网站页面 2) AJAX调用是从客户端JavaScript发出的,调用网站中的C#函数 3) C#website函数调用API(使用一个由Swagger生成的客户端) 4) API序列化数据并将其作为JSON返回给网站 5) 网站中的Swagger客户端将数据反序列化回POCO类 6) WebsiteC#函数将数据序列化回JSON,以将其返回到AJAX函数 7) 客户机中的JSON数据已经完成了一些操作——首先解析JSON之后不可避免地要完成 示例代码: AJAX调用:C# 调用API时重复反序列化和序列化-有更好的方法吗?,c#,ajax,serialization,asp.net-core,C#,Ajax,Serialization,Asp.net Core,我正在开发一个网站和一个API来为it数据提供服务,我注意到我当前的过程涉及在进行API调用时重复序列化和反序列化相同的数据。我想知道是否有更好的方法来处理事情。网站和API都是使用ASP.NETCore2.0用C#编写的 我目前的程序如下: 1) 最终用户加载网站页面 2) AJAX调用是从客户端JavaScript发出的,调用网站中的C#函数 3) C#website函数调用API(使用一个由Swagger生成的客户端) 4) API序列化数据并将其作为JSON返回给网站 5) 网站中的Sw
var xhr = new XMLHttpRequest();
xhr.open('get', "/GetData", true);
xhr.onload = function () {
var data = JSON.parse(xhr.responseText);
doSomething(data);
}.bind(this);
xhr.send();
网站方法:
[Route("/GetData")]
public async Task<IActionResult> GetData()
{
var data = await ApiClient.ApiDataGetAsync();
return Json(data);
}
[Route(“/GetData”)]
公共异步任务GetData()
{
var data=await ApiClient.ApiDataGetAsync();
返回Json(数据);
}
API方法:
[HttpGet]
public Dictionary<int, string> GetData()
{
return _logic.GetData();
}
[HttpGet]
公共字典GetData()
{
返回_logic.GetData();
}
如上所示,在Swagger客户端将数据反序列化为POCO之前,API将数据序列化为JSON,然后在网站中序列化回JSON,以便客户端进行处理
我意识到我可以通过直接从AJAX调用API而不是通过网站来简化这一点,但我宁愿避免这样做,原因有很多:
1) 它会将API与网站前端紧密耦合,目前我可以选择在网站中实现一个接口层,以简化将来需要更换API时的工作
2) 这将减少我对谁可以访问API的控制——目前它被IP地址锁定
有什么方法可以改进这个过程,这样在保留Swagger客户端的同时,数据就不必序列化两次吗?好吧,您可以放弃客户端,只需使用
HttpClient
从API获取数据,将您的操作作为代理
客户机实际上是为了给您提供要使用的C#对象,因此它会序列化/反序列化请求/响应,以便您更容易使用API。这就是重点。你的意思是你实际上并不想要这个,所以干脆放弃这个客户
相反,您可以使用
HttpClient
从操作直接向API发出请求,然后简单地从HttpClient
调用返回响应。由于API返回JSON,而您需要JSON,因此无需进行进一步处理。好的,您可以放弃客户端,只需使用HttpClient
从API获取操作,将您的操作作为代理
客户机实际上是为了给您提供要使用的C#对象,因此它会序列化/反序列化请求/响应,以便您更容易使用API。这就是重点。你的意思是你实际上并不想要这个,所以干脆放弃这个客户
相反,您可以使用
HttpClient
从操作直接向API发出请求,然后简单地从HttpClient
调用返回响应。由于API返回JSON,而您需要JSON,因此无需进行进一步的处理。您实际上想解决什么问题?与网络i/o所用的时间相比,序列化/反序列化json所用的时间很小
在这一点上,我想说,您正在尝试优化某些东西,而不知道它是否会提高应用程序性能或降低成本,这通常被认为是浪费时间。您实际想要解决的问题是什么?与网络i/o所用的时间相比,序列化/反序列化json所用的时间很小
在这一点上,我想说的是,您正在尝试优化某些内容,而不知道它是否会提高应用程序性能或降低成本,这通常被认为是浪费时间。您如何将其缩短?我不知道,我只是想知道是否可能。您如何将其缩短?我不知道,我只是想知道这是否可能。你可能是对的,这只是我认为是一个普通设计模式的一个奇怪方面。你可能是对的,这只是我认为是一个普通设计模式的一个奇怪方面。