2016-07-28 5 views
5
내 config 파일에서 맵의 YAML 컬렉션을 사용 시도

: 유형 공급자를 읽으려고 할 때F # YAML Provider 형

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 

그러므로 나는 도서관의 제한 또는이면 궁금해, 온라인 작업 코드를 구문 분석하는 중 ...? 당신의 도움에 대한

덕분에

답변

3

당신은 당신이 직접 작업 할 경우 스키마를 구할 수있을뿐만 아니고, 실제로 파일을로드해야합니다 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;}] 
>