ApiController 中的元组序列化 - C#

Posted

技术标签:

【中文标题】ApiController 中的元组序列化 - C#【英文标题】:Tuple Serialize in ApiController - C# 【发布时间】:2021-05-04 18:17:39 【问题描述】:

我正在使用 ApiController,我希望它返回一个元组列表,例如:List>。 (我的操作在 IHttpActionResult 对象中返回它。)

问题是,当我收到响应并尝试将其反序列化为上述对象 - 元组列表时,我得到了一个奇怪的结果,我客户端的 json 是:["m_Item1":"2020-01-30T12:13:23","m_Item2":"2020-01-30T12:13:23"]。

我希望它看起来像这样:["Item1":"2020-01-30T12:13:23","Item2":"2020- 01-30T12:13:23"]。

也许有人知道我该如何避免它?

我知道我可以创建一个包含 2 个日期时间字段的对象,但我不想要,因为我的客户端不知道服务器,所以它也不知道我声明的对象... 或者您可能有其他想法来解决它?

非常感谢!

【问题讨论】:

客户端不知道你在使用元组。这不会阻止您使用它,不是吗?那你为什么停止使用 DTO 而不是元组呢?客户端不关心服务器上的内容。客户端知道它接收到的 json 的结构就足够了。 万不得已,如果您不想创建单独的模型,请使用匿名类。 是的,我不想在服务器和客户端都创建模型,但是使用匿名类也不太舒服,所以如果我无法序列化元组,我将创建一个单独的模型...非常感谢! 【参考方案1】:

是的,避免这个问题非常容易。像每个好人一样创建一个适当的 dto 类,然后从您的 api 中返回它。

【讨论】:

谢谢,但是客户不知道我的dto类的问题呢?我认为最好使用泛型类型。没有? 所以,只需告知客户您的响应方式。解析正确的 dto 比解析泛型类要容易得多。 抱歉再次询问...但我的意思是我不想在服务器和客户端中创建对象。这是标准方式吗?我想使用微软的类型,所以我使用了一个元组。也许您知道正确序列化元组的方法?再次感谢您! 一种标准方法是创建一个名为 MyProjectName.DTO 的单独项目(前提是您已经拥有 MyProjectName.Client 和 MyProjectName.Server)。将所有 DTO 类型移动到该单独的项目中,并从客户端和服务器中引用它。 谢谢你的解释!目前我不想为此创建一个通用项目,因为它是单一动作......但如果我没有得到我的第一个问题(关于序列化)的答案,我想我将别无选择......无论如何 - 谢谢祝你有美好的一天!

以上是关于ApiController 中的元组序列化 - C#的主要内容,如果未能解决你的问题,请参考以下文章

Pylint 警告:可能不平衡的元组与序列解包

Python中的元组(Tuple)

Python学习篇 Python中的元组

C#以及C#7.0中的元组对象详解Tuple

Python乘以相等长度的元组

预期 LP_c_float 实例而不是 glVertex3fv 中的元组