PeopleSoft JSON动态属性数据类型

时间:2015-03-02 23:28:13

标签: .net json web-services serialization peoplesoft

我是一家与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服务应该像合同一样,所以他知道期望什么样的数据类型,并且它不应该像这样改变他。是的,我了解他的来源,但是有标准化的行业惯例吗?如果是这样,文档/证据在哪里?我想要一个来自大学的某个计算机科学页面的网站或一些合法的文件说“这是最好的做法"”。

现在我的最后一个问题是,开发人员是否真的很难以某种方式对其进行编码,以便每次都可以查看它是列表还是对象?我认为不是这样,但是这位开发人员发誓说,这是太多代码"或者"太多的工作"每次都必须适应这种情况。

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

谢谢!

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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