F# Yaml类型提供程序

6

我尝试在我的配置文件中使用Yaml映射集合:

Companies:
  - code: 11
    name: A
    country: FR
    functionalCurrency: EUR
  - code: 12
    name: B
    country: GB
    functionalCurrency: GBP

然而,当试图使用类型提供程序读取它时,它只会找到列表的第一个结果。
示例代码:
  open FSharp.Configuration
  type CompaniesConfig = YamlConfig<"Config.yaml">  
  let config = CompaniesConfig()

输出结果为:
  val config : CompaniesConfig =
    Companies:
    - code: 11
      name: A
      country: FR
      functionalCurrency: EUR

尝试在线解析代码成功了,因此我想知道这是一个库的限制还是其他原因?谢谢你的帮助。
1个回答

4

如果您想直接使用文件,而不仅仅是获取模式,则需要实际加载文件:config.Load(yamlFile)。文档中应该更加明确说明这一点。我使用了链接中的示例文件。

#if INTERACTIVE
#r @"..\packages\FSharp.Configuration.0.6.1\lib\net40\FSharp.Configuration.dll"
#endif

open FSharp.Configuration
open System.IO

/// https://github.com/fsprojects/FSharp.Configuration/blob/master/tests/FSharp.Configuration.Tests/Lists.yaml

[<Literal>]
let yamlFile = __SOURCE_DIRECTORY__ + "..\Lists.yaml"

File.Exists yamlFile

type TestConfig = YamlConfig<yamlFile>
let config = TestConfig()

config.Load(yamlFile)
config.items.Count
config.items

然后我得到了这两个项目:

> 
val it : int = 2
> 
val it : System.Collections.Generic.IList<TestConfig.items_Item_Type> =
  seq
    [FSharp.Configuration.TestConfig+items_Item_Type
       {descrip = "Water Bucket (Filled)";
        part_no = "A4786";
        price = 147;
        quantity = 4;};
     FSharp.Configuration.TestConfig+items_Item_Type
       {descrip = "High Heeled "Ruby" Slippers";
        part_no = "E1628";
        price = 10027;
        quantity = 1;}]
> 

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