Как десериализовать объект JSON с массивом, не зная типов объектов в этом массиве - PullRequest
0 голосов
/ 10 ноября 2011

Я создаю приложение Foursquare для Windows Phone 7. Оно прекрасно работает с HttpWebRequests, и я отлично получаю объекты JSON.Я использую метод DataContractJsonSerializer (тип).Но при десериализации этого JSON для объекта, который я хочу, все идет хорошо, пока я не обнаружу и массив объектов, где я не знаю, какой тип объекта ожидать (также не знаю количество и порядок объектов).Но мне нужно определить этот тип при десериализации в методе DataContractJsonSerializer (type).

Позвольте мне показать вам снимок JSON, который вызывает проблему:

notifications":
[{
    "type":"notificationTray",
    "item":{
        "unreadCount":0
    }
},{
    "type":"message",
    "item":{
        "message":"OK! We've got you @ Strandslag 4. You've been here 2 times."
    }
}]

Итак, ядесериализовать это в массив объектов Notification с двумя значениями: «тип public public» и «элемент public object».Я не могу знать, какие и сколько уведомлений будут в массиве (и, следовательно, какого типа должен быть элемент 'item').Как вы можете видеть в JSON, первое уведомление имеет элемент типа int, но элемент второго уведомления имеет тип string.Но мне нужно знать, что для десериализации ... Или же он просто остается нулевым ... Так что я не могу привести его к правильному типу ..

Кто-нибудь знает, как решить это красиво?

1 Ответ

1 голос
/ 10 ноября 2011

Хм, не уверен на 100%, что это ответит на ваш вопрос, но разве вы не можете использовать javascript для преобразования объекта в строку, а затем манипулировать им таким образом?

Что-то вроде:

значение переменной = что угодно [число] .toString;

Это даст вам строку, с которой вы можете работать.Затем вы можете попытаться проанализировать его обратно в int.

var valueInt = parseInt (value);

Затем используйте оператор IF, чтобы увидеть, существует ли valueInt или нет, чтобы определить, какой типзначение первого объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...