使用 REST Api,如何在我输入的请求模型中包含 "any kind of json"?
Using a REST Api, how to include "any kind of json" in my typed request model?
我正在使用 .NET Framework 和 ASP.NET Core 创建 REST Web Api。
此网站 api 有一个获取请求模型以保存数据的调用和一些稍后检索数据的调用。
大部分数据是我后台需要的结构化信息,保存在数据库中不同的字段和表中。在检索时,它从这些表中加载并返回。
一切正常。
但是,我现在有一个要求,即调用者想要保存并在以后检索任意数据(假设是随机 json)作为这些字段之一。我可以从数据库中保存和加载 json 这不是问题,我的问题是为我的请求构建网络 api 模型。
[HttpPost]
public IActionResult Save([FromBody] ApiCallRequestModel request)
{
// ...
}
public sealed class ApiCallRequestModel
{
// structured, well known information
public int? MaybeSomeNumber { get; set; }
[Required]
public string SomeText { get; set; }
[Required]
public SubModel SomeData { get; set; }
// one field of unknown json data
public ??? CustomData { get; set; }
}
我可以考虑 dynamic
甚至 ExpandoObject
或 JObject
来尝试,我可能会尝试,但我想要一个可行的解决方案,因为它是最佳实践,而不仅仅是因为我试过了,今天我的简单测试并没有失败。
如果一切都失败了,我可以将字段设为字符串并告诉客户端将序列化的 json 放入其中。但如果这个问题没有答案,我认为这是最后的解决方法。
事实证明,google 这个主题极其困难,因为我将使用的所有词都会引导我进入解释 Json 我的请求模型本身序列化的页面。我知道它是如何工作的,这不是问题。结构化数据 和 免费 json 的混合是我无法从有点权威的来源中找到的。
那么你会在这里使用什么类型,在你的模型 属性 中接收任意 json 的最佳实践是什么?
总而言之,正如我所建议的那样,我使用了 Json.NET
nuget 包中的 JToken
,因为我的项目中已经有了该包。
[HttpPost]
public IActionResult Save([FromBody] ApiCallRequestModel request)
{
// ...
}
public sealed class ApiCallRequestModel
{
// structured, well known information
public int? MaybeSomeNumber { get; set; }
[Required]
public string SomeText { get; set; }
[Required]
public SubModel SomeData { get; set; }
// one field of unknown json data
public JToken CustomData { get; set; }
}
很有魅力。
我正在使用 .NET Framework 和 ASP.NET Core 创建 REST Web Api。
此网站 api 有一个获取请求模型以保存数据的调用和一些稍后检索数据的调用。
大部分数据是我后台需要的结构化信息,保存在数据库中不同的字段和表中。在检索时,它从这些表中加载并返回。
一切正常。
但是,我现在有一个要求,即调用者想要保存并在以后检索任意数据(假设是随机 json)作为这些字段之一。我可以从数据库中保存和加载 json 这不是问题,我的问题是为我的请求构建网络 api 模型。
[HttpPost]
public IActionResult Save([FromBody] ApiCallRequestModel request)
{
// ...
}
public sealed class ApiCallRequestModel
{
// structured, well known information
public int? MaybeSomeNumber { get; set; }
[Required]
public string SomeText { get; set; }
[Required]
public SubModel SomeData { get; set; }
// one field of unknown json data
public ??? CustomData { get; set; }
}
我可以考虑 dynamic
甚至 ExpandoObject
或 JObject
来尝试,我可能会尝试,但我想要一个可行的解决方案,因为它是最佳实践,而不仅仅是因为我试过了,今天我的简单测试并没有失败。
如果一切都失败了,我可以将字段设为字符串并告诉客户端将序列化的 json 放入其中。但如果这个问题没有答案,我认为这是最后的解决方法。
事实证明,google 这个主题极其困难,因为我将使用的所有词都会引导我进入解释 Json 我的请求模型本身序列化的页面。我知道它是如何工作的,这不是问题。结构化数据 和 免费 json 的混合是我无法从有点权威的来源中找到的。
那么你会在这里使用什么类型,在你的模型 属性 中接收任意 json 的最佳实践是什么?
总而言之,正如我所建议的那样,我使用了 Json.NET
nuget 包中的 JToken
,因为我的项目中已经有了该包。
[HttpPost]
public IActionResult Save([FromBody] ApiCallRequestModel request)
{
// ...
}
public sealed class ApiCallRequestModel
{
// structured, well known information
public int? MaybeSomeNumber { get; set; }
[Required]
public string SomeText { get; set; }
[Required]
public SubModel SomeData { get; set; }
// one field of unknown json data
public JToken CustomData { get; set; }
}
很有魅力。