gpt4 book ai didi

json - Xamarin + JSON.Net

转载 作者:行者123 更新时间:2023-12-03 15:15:56 26 4
gpt4 key购买 nike

我无法理解为什么 Newtonsoft JSON 解析器必须是 Xamarin 下的特定设备。我似乎找不到任何方法让解析器存在于一个公共(public)的共享库中。我正在使用 Tasky Pro 示例应用程序。我可以从 Xamarin 商店获取 JSON.Net DLL 以在 Android 和 iOS 项目中工作,但这在架构上没有任何意义。例如,正如您所料,SQLite 的东西都在一个共享库中——作为一组 c# 源文件。

理想情况下,我只想添加对“Tasky.Core”的某种引用,并能够序列化/反序列化 JSON。

有没有办法让 JSON.Net 在共享库中工作(跨 droid/ios/wp8)?如果可能的话,尝试将源作为链接文件进行管理是非常巨大的......

如果没有,是否有其他管理 JSON 的方法可以以这种方式工作?

最佳答案

您应该可以使用 JSon.NET NuGet Package为了这。该实现实际上是特定于平台的 [1],但 NuGet 会透明地为您处理并为您选择正确的实现。

请注意,您需要 Mono 3.2.6 和 Xamarin.iOS 7.0.6,这周刚刚进入 alpha channel ,我刚刚修复了这方面的一些关键错误。你还应该将 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 团队和包作者协调,因此需要一些时间。

关于json - Xamarin + JSON.Net,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20646356/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com