2013-06-24 4 views
0

1) Мне нужно загрузить большой файл JSON в приложении Windows Phone, я хотел бы обработать JSON при его загрузке, потому что в противном случае приложение просто загружает JSON, и это может занять до 10 секунд или более, есть ли способ сделать это? Я искал это в течение 2 дней и ничего не работает ...Загрузка большого файла JSON в C#

2) Есть ли простой способ проверить новые элементы в этом файле JSON? Он размещен в сети, поэтому мне нужно будет проверить, есть ли новые файлы (узлы), добавленные в файл.

+0

StreamReader ..... –

+0

@newStackExchangeInstance: Знаете ли вы о каких-либо потоковых анализаторах JSON? – SLaks

ответ

1
  1. Просто попросите сервер если есть что-то новое, и заставить его отправить вам только фактический новый материал. Это будет намного меньше, поэтому меньше данных для передачи на проводе и меньше времени для обработки и визуализации (если это необходимо).

  2. Или создайте запрос JSON, который получает данные в пакетах, и после того, как каждый пакет поступит, обработайте его. Загрузка займет больше времени, так как во время обработки вы будете блокировать запрос, но он даст отзыв пользователю. Вы можете использовать это, нажав пакет в локальном стеке JS и продолжить запрос на другой пакет, обрабатывая тот, который уже доступен поверх него. Но это довольно сложный сценарий, imo, для этого достаточно простого (кажется мне) материала.

+0

Спрашивать сервер не вариант Я боюсь, это rss-канал, такой как JSON-файл, который обновляется каждый раз, когда новые элементы становятся добавленными (с 2008 года), я просто могу получить этот JSON-файл, нонг еще ... – Schaemelhout

+0

Я боюсь, в этот момент у вас не так много вариантов, а затем, чтобы справиться с этим с умом на стороне клиента. – Tigran

+0

Вот чего я боялся, и надеялся, что кто-нибудь здесь столкнулся с этой конкретной проблемой передо мной и имел какие-то советы для меня .. :) – Schaemelhout

0

1. Если вы хотите, чтобы разобрать через объект JSON постепенно, смотрите в JSON.NET-х JsonReader.

Имейте в виду, что на Windows Phone, вы не можете вытащить из сетевого потока в потоке пользовательского интерфейса, но вы можете, если вы толкаете свою работу в фоновом потоке (посмотреть на BackgroundWorker).

2. Если ваш веб-сервер поддерживает его, вы можете передать заголовок If-None-Match/If-Modified-Since и принять ответ 304, чтобы указать, что ничего не изменилось.

Однако это соответствует только всем HTTP-запросам. Если вам нужно более подробно, вы можете разделить ваши запросы в:

а) запрос список идентификаторов и последней модификации

б) Запрос сведений о списке идентификаторов (определяется приложением, основываясь на измененные даты)