如何解决使用FSharp.Data.Json.JsonValue.Parse时出现的MissingMethodException问题

3
尝试使用FSharp.Data.Json库解析一个简单的json字符串时,遇到了以下错误。我正在使用F# 2.0交互式。有没有解决这个错误的想法?

JsonValue.Parse(@"{""id"": ""117sds""}");;
System.MissingMethodException: 找不到方法:'!!0 Microsoft.FSharp.Collections.SeqModule.ExactlyOne(System.Collections.Generic.IEnumerable1<!!0>)'.
at FSharp.Data.Json.JsonParser..ctor(String jsonText, FSharpOption
1 culture)
at FSharp.Data.Json.JsonValue.Parse(String text, FSharpOption`1 culture) in C:\Tomas\Projects\FSharp.Data\src\Library\Json.fs:line 215
at .$FSI_0063.main@()


Seq.ExactlyOneSeq 模块中,该模块位于 FSharp.Core.dll 中。您是否检查过在运行此程序的位置是否正确安装了 F#? - John Palmer
3个回答

5
正如Jack所指出的,F# Data库只适用于F# 3.0。如果您可以更新F#版本,它将起作用并且您将获得其他好处(例如类型提供程序)。
如果您无法升级,则可以将带有JSON解析器和运行时的文件复制到您的项目中,并更改一些内容以支持F# 2.0版(许可证允许)。您需要的文件是Json.fs
我认为我们不想支持2.0版本(到目前为止),但如果修复很容易,请提交更改的拉取请求,我们可以合并以使此过程对其他人更加简单。

MSDN页面似乎暗示ExactlyOne在F# 2.0中受支持(F#核心库版本支持:2.0、4.0、Portable)。这是文档错误吗? - John Palmer
@JohnPalmer 文档讨论了 .NET Framework 版本;虽然可能需要更清楚一些。你可以看到 Seq.exactlyOne 函数仅在 F# 3.0 中受支持,因为页面顶部的 Visual Studio 2012 只是文本;如果该方法在其他版本中得到支持,它将是一个链接,允许您从其他版本(例如 Visual Studio 2010)导航到文档。 - Jack P.

4

Seq.exactlyOne是一种仅在F# 3.0中可用的方法。遗憾的是,在F# 2.0中无法轻松使用FSharp.Data库。


0

从版本1.1.6开始,运行时组件(Json解析器、Csv解析器和Http工具)不再使用FSharp.Core 4.0.0.0(即F# 2.0版本)中不存在的任何方法,因此如果您不使用类型提供程序,则可以在F# 2.0中使用FSharp.Data


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接