【发布时间】: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