您应该可以为此使用JSon.NET NuGet Package。该实现实际上是特定于平台的 [1],但 NuGet 会透明地为您处理并为您选择正确的。
请注意,您需要 Mono 3.2.6 和 Xamarin.iOS 7.0.6,这周刚刚进入 alpha 通道,我刚刚修复了这方面的一些关键错误。您还应该将 Xamarin Studio 中的 NuGet 加载项升级到最新版本 (0.8),其中包含几个与 PCL 相关的错误修复。
如果您还没有这样做,只需将NuGet Add-In 添加到 Xamarin Studio,然后搜索“JSon.NET”,加载项将自动安装包并为您添加所需的库引用。
[1] NuGet 包包含用于不同目标框架的不同 .dll,然后为您的项目挑选并引用最佳的 - 因此您的应用程序将仅包含一个实现,但 iOS 应用程序可能使用与桌面应用程序。
2014 年 1 月 14 日更新:
NuGet 包通常包含不同的实现 - 遗憾的是,由于 Reflection.Emit 或 Full DLR 等 API 在 iOS 上不可用,因此并非所有包都可以与 Xamarin.iOS 一起使用。
如果您查看packages/Newtonsoft.Json.5.0.8/lib/ 目录,您会看到不同的子目录 - 每个子目录都包含不同的实现,NuGet 将使用最适合当前目标框架的实现。不幸的是,NuGet 并不总是选择正确的 :-(
对于Newtonsoft.Json.5.0.8,“portable-net45+wp80+win8”实现使用了iOS上没有的DLR功能,“portable-net40+sl4+wp7+win8”一个就可以了。因此,如果您将 NuGet 包添加到以 Profile136 为目标的 PCL,您将获得正确的实现。
没有选择其他实现的 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 团队和包作者协调,因此需要一些时间。