#c# #json #windows-phone-7
#c# #json #windows-phone-7
Вопрос:
Я создаю приложение Foursquare для Windows Phone 7. Это прекрасно работает с HttpWebRequests, и я отлично получаю объекты JSON. Я использую метод DataContractJsonSerializer (type). Но при десериализации этого JSON в объект, который я хочу, все идет хорошо, пока я не получаю массив объектов, где я не знаю, какой тип объекта ожидать (также не знаю количество и порядок объектов). Но мне действительно нужно определить этот тип при десериализации в методе DataContractJsonSerializer(тип).
Позвольте мне показать вам снимок JSON, который вызывает проблему:
notifications":
[{
"type":"notificationTray",
"item":{
"unreadCount":0
}
},{
"type":"message",
"item":{
"message":"OK! We've got you @ Strandslag 4. You've been here 2 times."
}
}]
Итак, я десериализую это в массив объектов уведомлений с двумя элементами: «общедоступный строковый тип» и «общедоступный элемент объекта». Я не могу знать, какие и сколько уведомлений будет в массиве (и, следовательно, какого типа должен быть элемент ‘item’). Как вы можете видеть в JSON, первое уведомление содержит элемент типа int , но элемент второго уведомления имеет тип string . Но мне нужно знать это для десериализации… Или же он просто остается нулевым.. Поэтому я не могу привести его к правильному типу..
Кто-нибудь знает, как это красиво решить?
Комментарии:
1. Информацию о создании 4th amp; Mayor (другого приложения Foursquare) ищите здесь. Это может быть полезно для вас: jeff.wilcox.name/2011/03/4am-leaderboard-notification
2. Спасибо Ku6opr! Это, конечно, вариант для моей проблемы. Необходимо перестроить мое приложение из стандартного метода десериализации в библиотеку, используемую в примере. Я собираюсь попробовать! Еще раз спасибо!
Ответ №1:
Хммм, не уверен на 100%, что это ответит на ваш вопрос, но разве вы не можете использовать javascript для преобразования любого объекта в строку, а затем манипулировать им таким образом?
Что-то вроде:
значение var = независимо от [числа].toString;
Это дало бы вам строку, с которой вы могли бы работать. Затем вы могли бы попытаться разобрать его обратно в int.
var valueInt = parseInt(значение);
Затем используйте оператор IF, чтобы увидеть, существует ли valueInt или нет, чтобы определить, какое значение имеет первый объект.
Комментарии:
1. Это также может быть решением, но сначала я попробую JSON.net специальная библиотека для Windows Phone. Я лично думаю, что это дало бы мне более чистый код. Спасибо за вашу помощь!