使用F#类型提供器解析JSON文件时抛出TypeInitializationException
解决F# JsonProvider的TypeInitializationException异常
你遇到的问题核心是混淆了JsonProvider的Parse和Load方法的用途,导致程序把文件名当成JSON字符串去解析,自然触发了无效JSON的错误。
问题根源
PriceDemand.Parse("PriceDemand.json")这段代码里,Parse方法的作用是直接解析JSON格式的字符串,但你传入的是文件名"PriceDemand.json"——这个字符串本身并不是有效的JSON(有效的JSON应该以[或{开头),所以类型初始化时就抛出了异常。
修正方案
改用Load方法来加载本地JSON文件,它专门用于从文件路径读取并解析JSON数据:
open FSharp.Data open System type PriceDemand = JsonProvider<"PriceDemand.json"> // 用Load替换Parse,加载文件内容 let data = PriceDemand.Load("PriceDemand.json") [<EntryPoint>] let main argv = data |> Seq.iter (fun v -> printf "%s " v.RegionId) Console.ReadLine() |> ignore 0 // return an integer exit code
额外注意事项
- 确保你的
PriceDemand.json文件路径正确:如果是控制台项目,右键文件→属性→设置“复制到输出目录”为始终复制或如果较新则复制,这样程序运行时能在输出目录找到文件。 JsonProvider在编译阶段会读取你指定的示例JSON(这里是PriceDemand.json)来生成强类型,运行时Load会加载实际数据并映射到这个类型上,所以示例JSON的格式要和实际数据一致。
内容的提问来源于stack exchange,提问作者onefootswill
相关产品推荐
相关产品推荐

