理想情况下,我想添加一些“Tasky.Core”的参考,并能够对JSON进行序列化/反序列化.
有没有办法让JSON.Net在共享库中工作(跨droid / ios / wp8)?来源是非常巨大的尝试管理为链接文件,如果这是可能的…
如果没有,是否有一些替代方法来管理可以这样工作的JSON?
理想情况下,我想添加一些“Tasky.Core”的参考,并能够对JSON进行序列化/反序列化.
有没有办法让JSON.Net在共享库中工作(跨droid / ios / wp8)?来源是非常巨大的尝试管理为链接文件,如果这是可能的…
如果没有,是否有一些替代方法来管理可以这样工作的JSON?
请注意,您需要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应用程序可能会使用与桌面应用程序不同的应用程序.
更新01/14/14:
NuGet软件包通常包含不同的实现 – 不幸的是,由于API(如Reflection.Emit或全DLR)在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团队和软件包协作,因此需要一些时间.