加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Xamarin JSON.Net

发布时间:2020-12-16 19:48:57 所属栏目:百科 来源:网络整理
导读:我很难理解为什么Newtonsoft JSON解析器必须是在Xamarin下的设备特定的.我似乎找不到任何方式让解析器存在于一个共同的共享库中.我正在使用Tasky Pro示例应用程序.我可以从Xamarin商店获得JSON.Net DLL,在 Android和iOS项目中工作,但这并不意味着建构性.例如
我很难理解为什么Newtonsoft JSON解析器必须是在Xamarin下的设备特定的.我似乎找不到任何方式让解析器存在于一个共同的共享库中.我正在使用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通道,我刚刚修复了这个领域的一些关键错误.您还应该将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>..packagesNewtonsoft.Json.5.0.8libportable-net45+wp80+win8Newtonsoft.Json.dll</HintPath>
</Reference>

<Reference Include="Newtonsoft.Json">
  <HintPath>..packagesNewtonsoft.Json.5.0.8libportable-net40+sl4+wp7+win8Newtonsoft.Json.dll</HintPath>
</Reference>

它应该工作.

一般来说,当您在添加新的NuGet软件包之后收到有关缺少类型的错误消息时,请转到相应的软件包目录,并为该符号使用grep -r – 有可能是不同的实现不使用此类型.

希望将来可以提供更优雅的解决方案,但需要与NuGet团队和软件包协作,因此需要一些时间.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读