【问题标题】:Order of JSON important while sending data?发送数据时 JSON 的顺序很重要吗?
【发布时间】:2020-06-25 07:44:39
【问题描述】:

我有一个发送 JSON 数据的帖子 API。

{   
    "timestamp": 1592977899880,
    "userid": 123
}

这很好,但是当我更改顺序时

{   
    "userid": 123,
    "timestamp": 1592977899880    
}

我在 API 中得到 null 注意:- 时间戳字段是整数,我在时间戳中发送 13 位长。但是为什么它在第一个场景中起作用

 public HttpResponseMessage dataSync(AnalyticsData request)

这是我期待 JSON 的地方 对于请求字段中的第一个场景,我得到 request.userid = 123 和 请求.timestamp = 0 而对于第二种情况,我得到 请求 = 空

 [HttpPost]
    公共 HttpResponseMessage 数据同步(AnalyticsData 请求)
    {
         如果(请求!= null)
         { //..一些东西
         }
    }

    公共类 AnalyticsData
    {
        公共 int 时间戳 { 获取;放; }
        公共 int 用户 ID { 获取;放; }
    }

【问题讨论】:

  • 第一个“有效”的例子不是有效的 JSON - 逗号都是错误的;你确定你有正确的“工作”和“不工作”的例子吗?这可能也与掩盖事物的溢出问题有关,所以不妨尝试在您在那里时将时间戳更改为long
  • 明确地说:不,JSON 中的顺序通常对任何合理的序列化器都无关紧要,而 asp.net-mvc 使用相当合理的序列化器。至于为什么它在这种情况下不起作用:您至少有 2 个已知问题(逗号和溢出);我会先解决这些问题!
  • 是的,@MarcGravell JSON 的顺序无关紧要,而且我已将变量更改为 long。但我试图弄清楚为什么它与变量映射的第一种情况即使它超过了 int 限制
  • 您的minimal reproducible example 将包含AnalyticsData 的源代码。
  • 嘿,添加了@mjwills 示例

标签: c# json asp.net-mvc api post


【解决方案1】:

当您在 API 调用中发送参数时,这应该是 API 的“预期”,如您的 API 文档中所示。

所以第一个是 API 期望的格式,第二个是错误的格式,我的意思是 API 可能首先需要 TimeStamp 参数,其次是 UserId。这就是发生这种情况的原因。

此外,在您的问题中,您的第一个 JSON 格式错误,逗号应该在第一个参数之后,而不是在最后一个参数之后。

【讨论】:

  • @mjwills,当然这是一个错误的 JSON,我知道,这就是我编辑问题的原因,但编辑仍然未决,Aso 我编辑我的答案以便清楚什么我的意思是
  • 我拒绝了建议的编辑,特别是因为我认为我们不应该修复 JSON,除非我们知道损坏的 JSON 是否是正在观察的问题的一部分
  • 至于另一部分:我不知道有什么主流的 JSON 序列化器对订单很挑剔
【解决方案2】:

这完全取决于 API 如何处理传入的数据。在某些情况下,例如 .NET Core,它可能会尝试自动将 JSON 映射到 c# 类,在这种情况下,顺序可能并不重要,只要字段的名称与类的属性匹配即可。在其他情况下,它可能会将 JSON 视为原始字符串,然后手动构建一个对象,在这种情况下,它可能会期望某些事物具有某种顺序、格式、数据类型等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-11
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多