Ответ 1
Вы можете использовать JSon.NET NuGet Package для этого. Реализация на самом деле зависит от платформы [1], но NuGet будет прозрачно заботиться об этом для вас и выбрать правильный для вас.
Обратите внимание, что для этого вам нужны Mono 3.2.6 и Xamarin.iOS 7.0.6, которые только что попали в альфа-канал на этой неделе, я только что исправил некоторые критические ошибки в этой области. Вы также должны обновить надстройку NuGet в Xamarin Studio до последней версии (0.8), которая содержит несколько исправлений ошибок, связанных с PCL.
Просто добавьте NuGet Add-In в Xamarin Studio, если вы еще этого не сделали, затем выполните поиск "JSon.NET", надстройка автоматически установит пакет и добавит нужные вам ссылки библиотек.
[1] Пакет NuGet содержит разные DLL файлы для разных целевых фреймворков, а затем выбирает и ссылается на лучший для вашего проекта - поэтому ваше приложение будет содержать только одну реализацию, но приложение iOS может использовать другое, настольного приложения.
Обновление 01/14/14:
Пакеты NuGet обычно содержат разные реализации - к сожалению, не все из них будут работать с Xamarin.iOS из-за API, таких как Reflection.Emit или Full DLR, которые недоступны в iOS.
Если вы посмотрите в каталог packages/Newtonsoft.Json.5.0.8/lib/
, вы увидите разные подкаталоги - каждая из них содержит другую реализацию, а NuGet будет использовать ту, которая наилучшим образом соответствует текущей целевой структуре. К сожалению, NuGet не всегда выбирает правильный: - (
Для Newtonsoft.Json.5.0.8 реализация "portable-net45 + wp80 + win8" использует функции DLR, которые недоступны в iOS, "portable-net40 + sl4 + wp7 + win8" - это нормально. Поэтому, если вы добавите пакет NuGet в PCL, для таргетинга которого, например, Profile136, вы получите правильную реализацию.
Отсутствует GUI для выбора другой реализации, но вы можете редактировать файл .csproj. Заменить
<Reference Include="Newtonsoft.Json">
<HintPath>..\packages\Newtonsoft.Json.5.0.8\lib\portable-net45+wp80+win8\Newtonsoft.Json.dll</HintPath>
</Reference>
с
<Reference Include="Newtonsoft.Json">
<HintPath>..\packages\Newtonsoft.Json.5.0.8\lib\portable-net40+sl4+wp7+win8\Newtonsoft.Json.dll</HintPath>
</Reference>
и он должен работать.
В общем случае, когда вы получаете сообщение об отсутствии пропущенных типов после добавления нового пакета NuGet, перейдите в соответствующий каталог пакета и grep -r
для этого символа - есть вероятность, что существует другая реализация, которая не использует этот тип.
Надеюсь, в будущем будет доступно более элегантное решение, но для этого потребуется координация с командой NuGet и авторами пакетов, поэтому потребуется некоторое время.