使用 REST Api,如何在我的类型请求模型中包含“任何类型的 json”?

2024-03-10

我正在使用 .NET Framework 和 ASP.NET Core 创建 REST Web Api。

此 Web API 有一个调用,用于获取请求模型以保存数据,以及一些调用,用于稍后检索数据。

大多数数据是我在后端需要的结构化信息,它们被保存到数据库中的不同字段和表中。检索时,它会从这些表中加载并返回。

这一切都有效。

然而,我现在有一个要求,调用者想要保存并稍后检索任意数据(让我们说随机 json)作为这些字段之一。我可以从数据库保存和加载 json,这不是问题,我的问题是为我的请求构建 Web 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 or JObject我可能会尝试,但我想要一个有效的解决方案,因为它是最佳实践,而不仅仅是因为我尝试过并且今天通过我的简单测试没有失败。

如果其他一切都失败了,我可以将该字段设置为字符串并告诉客户端将序列化的 json 放入其中。但如果这个问题没有答案,我认为这是最后的解决办法。

事实证明,用 google 搜索这个主题非常困难,因为我使用的所有单词都会引导我进入解释请求模型本身的 Json 序列化的页面。我知道这是如何运作的,这不是问题。结构化数据的混合andfree json 是我无法从权威来源找到的。

那么你会在这里使用什么类型,在模型的一个属性中接收任意 json 的最佳实践是什么?


总结一下,按照建议我使用了JToken来自Json.NETnuget 包,因为我的项目中已经有了该包。

[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; }
}

奇迹般有效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 REST Api,如何在我的类型请求模型中包含“任何类型的 json”? 的相关文章

随机推荐