【问题标题】:PeopleSoft JSON Dynamic Property Data TypePeopleSoft JSON 动态属性数据类型
【发布时间】:2015-05-03 11:43:15
【问题描述】:

我是一家使用 PeopleSoft HCM 9.1 的公司的软件工程师。我为我们的 Sharepoint 和 .NET 团队编写 Web 服务来使用这些 RESTful Web 服务。我发送给他们的 Content-Type 是 application/json 并且集成代理所做的序列化非常棒。我遇到了一个问题,我们的 .NET 工程师发誓这是不合法的;但是,当我访问 JSON 解析器站点并检查它是否有效时,它会说是。这是问题所在。数据以 JSON 格式出现,但有一个属性,其第一次出现的数据类型是对象。进入的第二行将其更改为列表/数组。我无法更改它,因为它是 Oracle PeopleSoft 已实施的交付序列化的一部分。这是示例 -

{"C_DATA":
[{
         "HRS_PERSON_ID": 120483,
         "HRS_PROFILE_SEQ": 17,
         "HRS_JOB_OPENING_ID": 125075,
         "HRS_QSTN_ID": 1354,
         "HRS_JO_RQMT_SEQ": 1,
         "HRS_QSTN_ORDER_NBR": 4,
         "HRS_OPN_ENDED_QSTN": "Y",
         "HRS_DELETE_REQ": "",
         "HRS_REF_NUM_LONG": "",
         "HRS_RATING": "",
         "HRS_RANKING": 0,
         "HRS_ANSWER_ID": 0,
         "HRS_OPEN_ENDED_ANS": "",
         "C_ONLINE_SCREEN": "N",
         "DESCRLONG": "What is the phone number of your emergency contact?",
         "C_HRS_APP_QSTA":          {
            "HRS_JOB_OPENING_ID": 125075,
            "HRS_JO_RQMT_SEQ": 0,
            "HRS_QSTN_ID": 1354,
            "HRS_ANSWER_ID": 0,
            "CORRECT_ANSWER": "",
            "HRS_POINTS": 0,
            "DESCR254": "",
            "ORDER_SEQ": 0
         }
      },
            {
         "HRS_PERSON_ID": 120483,
         "HRS_PROFILE_SEQ": 17,
         "HRS_JOB_OPENING_ID": 125075,
         "HRS_QSTN_ID": 1355,
         "HRS_JO_RQMT_SEQ": 1,
         "HRS_QSTN_ORDER_NBR": 5,
         "HRS_OPN_ENDED_QSTN": "N",
         "HRS_DELETE_REQ": "",
         "HRS_REF_NUM_LONG": "",
         "HRS_RATING": "",
         "HRS_RANKING": 0,
         "HRS_ANSWER_ID": 0,
         "HRS_OPEN_ENDED_ANS": "",
         "C_ONLINE_SCREEN": "N",
         "DESCRLONG": "Have you ever been arrested?",
         "C_HRS_APP_QSTA":          [
                        {
               "HRS_JOB_OPENING_ID": 125075,
               "HRS_JO_RQMT_SEQ": 1,
               "HRS_QSTN_ID": 1355,
               "HRS_ANSWER_ID": 1000,
               "CORRECT_ANSWER": "N",
               "HRS_POINTS": 0,
               "DESCR254": "Yes",
               "ORDER_SEQ": 1
            },
                        {
               "HRS_JOB_OPENING_ID": 125075,
               "HRS_JO_RQMT_SEQ": 1,
               "HRS_QSTN_ID": 1355,
               "HRS_ANSWER_ID": 1001,
               "CORRECT_ANSWER": "Y",
               "HRS_POINTS": 0,
               "DESCR254": "No",
               "ORDER_SEQ": 2
            }
         ]
      }
]
}

注意 C_HRS_APP_QSTA 属性如何首先是一个对象(带有 {}),在第二次运行中它是一个列表/数组(它有方括号 [])。

首先,这合法吗?根据 JSON 解析器,这是完全合法的。 (在这里查看:http://jsonformatter.curiousconcept.com/

其次,这是最佳做法吗?根据这位 .NET 开发人员的说法,他说 Web 服务应该像一个合同,这样他就知道期望什么数据类型,并且不应该像这样对他进行更改。是的,我知道他来自哪里,但有标准化的行业惯例吗?如果是这样,文档/证明在哪里?我想要一个来自大学的一些计算机科学页面的网站或一些说“这是最佳实践”的合法文档。

现在我的最后一个问题是,对于开发人员来说,编写代码是否真的很难让他每次都能检查它是列表还是对象?我不认为是这样,但是这个开发人员上下发誓这是“太多的代码”或“太多的工作”,每次都必须适应这种情况。

你说什么?我希望这是有道理的。我试图尽可能简单明了地描述这一点。

谢谢!

【问题讨论】:

  • 看来我不是唯一遇到此问题的人。这是有人发布了类似的内容link

标签: .net json web-services serialization peoplesoft


【解决方案1】:

在 PeopleTools 8.52+ 的更新版本中,Oracle 终于修复了 JSON 的序列化。所以这只是旧版 PeopleTools 的一个问题。

【讨论】:

    【解决方案2】:

    我们也面临同样的问题,我个人认为 Oracle 在这方面搞砸了。恕我直言,.NET 家伙是对的,这不是标准用途。

    【讨论】:

      猜你喜欢
      • 2018-11-28
      • 1970-01-01
      • 1970-01-01
      • 2015-11-25
      • 2021-12-10
      • 1970-01-01
      • 1970-01-01
      • 2019-08-10
      • 1970-01-01
      相关资源
      最近更新 更多