![](/img/trans.png)
[英]Task and deserializing objects from api logic and deserializing json
[英]Rewriting api and deserializing objects
我正在尝试将旧api迁移到webapi。 问题是体验有限,所以我在这里问这个问题。
当前的api在单个url中接受json有效负载。 说/api
。 json有效载荷具有以下结构
{'action': 'login', 'username': 'user1', 'password': 'password1'}
这应该是像/api/login
这样的路线,所以我可以做类似的事情
[Route("api/Login")]
public string Login(Login login)
并为反序列化定义一个类
class Login
{
public string username{ get; set; }
public string password{ get; set; }
}
所以我做了一个接受[FromBody]
有效负载的路由,我找不到根据动作以一种很好的方式反序列化对象的方法。
每个有效负载都可以是一个有效的可序列化对象,具有我描述的方式如果从有效负载中删除了action
密钥。
任何不会产生丑陋代码的建议? 请不要api重写或v2答案。 如果我能做到这一点,我不会问这个。
假设每个有效负载中都存在“action”,您可以将其反序列化为动态类型,然后检查操作值,然后在知道此操作后再次将有效负载转换为特定类型。 这解决了您遇到的特定问题。
所以你的端点代码看起来像这样:
//this is written from memory, so could have mistakes ...
var deserialisedData = Newtonsoft.Json.JsonConvert.DeserialiseObject<dynamic>(payload);
switch ( deserialisedData.action )
{
case "someValue":
//here you know what the action is so hopefully what kind of payload to expect
var properType = payload as SomeProperType
break;
}
如果你考虑创建一个全新的,合适的api,你可以开始为每个动作引入端点,一次一个。 将它们分开比让一个端点统治它们更好,可以这么说。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.