2015-03-02 2 views
2

Я инженер-программист для компании, которая работает с PeopleSoft HCM 9.1. Я пишу веб-службы для нашей команды Sharepoint и .NET для использования этих веб-сервисов RESTful. Переданный ими Content-Type I - это приложение/json, и сериализация, выполняемая посредником интеграции, довольно велика. Есть одна проблема, с которой я столкнулся, и наш инженер .NET ругается вверх и вниз, что это не законно; Однако, когда я перехожу на сайт парсера JSON и проверяю, действительно ли это, это говорит. Вот проблема. Данные попадают в JSON, но есть свойство, тип данных которого для первого вхождения является объектом. Вторая строка, входящая в нее, изменяет ее на список/массив. Я не могу изменить это, потому что это часть поставляемой сериализации, реализованной Oracle PeopleSoft. Вот пример -PeopleSoft JSON Dynamic Property Тип данных

{"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, он говорит, что веб-сервис должен быть похож на контракт, поэтому он знает, какие типы данных ожидать, и он не должен меняться на нем так. Да, я понимаю, откуда он, но существует стандартизированная отраслевая практика? Если да, то где документация/доказательство? Я хочу, чтобы веб-сайт с какой-то страницы компьютерных наук из Университета или какой-то законный документ, в котором говорится: «Это лучшая практика».

Теперь мой последний вопрос, действительно ли разработчику сложно программировать его таким образом, чтобы он мог просто проверить, каждый раз это список или объект? Я не думаю, что это, но этот разработчик ругается вверх и вниз, что это «слишком много кода» или «слишком много работы», чтобы каждый раз приспосабливаться к этому.

Что вы говорите? Я надеюсь в этом есть смысл. Я попытался описать это как можно более простым и ясным.

Спасибо!

+1

Похоже, что я не единственный человек с этими проблемами. Вот кто-то, кто разместил что-то похожее [link] (http://scripting.com/stories/2010/12/18/questionForJsonGurus.html#thisCausesProblemsForPeopleInSomeLanguagesBecauseApparentlyItsHardForThemToDealWithAnObjectWithoutInAdvanceKnowingItsTypeSoTheySayTheSolutionIsSimpleAlwaysMakeItAListSimpleForThemBut) – TSuperman29

ответ

0

Мы также сталкиваемся с теми же проблемами, и лично я думаю, что Oracle напортачил. ИМХО, парень .NET прав, это не стандартное использование.

Смежные вопросы