유형 공급자에 대해 배우고 있으며 획기적인 기능처럼 보입니다. 그러나 대상 유형에 Generic.Dictionary 속성이 있도록 JsonProvider를 사용하여 json을 역 직렬화 할 수 없습니다. Json.NET으로 할 수 있습니다. 다음은 코드입니다.
type ByProv = JsonProvider<"""{"dict":{"A":1,"B":2}}""">
type ByHand(d:Dictionary<string,int>) =
member val dict = d with get,set
let text = """{"dict":{"C":3,"D":4}}"""
let newt = JsonConvert.DeserializeObject<ByHand> text
let prov = ByProv.Parse text
printfn "%A" newt.dict.["C"]
//Can only call statically inferred A or B (and it will throw at run-time)
printfn "%A" prov.Dict.A
분명히 기본적으로가 dict
아닌 레코드 유형으로 추론됩니다 Dictionary
. 무시할 수 있습니까?
JSON 유형 공급자는 JSON 레코드가 레코드 (고정 필드 이름 포함) 저장에 사용되고 JSON 배열이 컬렉션 저장에 사용된다고 가정합니다. 귀하의 예는 이것이 크게 작동하지 않는 경우 중 하나입니다.
동적으로 이름이 지정된 필드가있는 JSON 레코드에 액세스해야하는 JsonValue
경우 제공된 유형에 의해 노출되는 기본 을 사용할 수 있습니다 .
type ByProv = JsonProvider<"""{"dict":{"A":1,"B":2}}""">
let text = """{"dict":{"C":3,"D":4}}"""
let prov = ByProv.Parse text
prov.Dict.JsonValue.["C"].AsInteger()
이것은 그다지 좋지 않으며 JSON 유형 공급자를 확장하여이를 더 잘 처리 할 수 있다고 가정합니다 (레코드를 배열과 더 비슷하게 처리). 토론을 위해 문제를 제출하고 GitHub의 F # 데이터에 풀 요청을 제출하십시오 !
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다