fsharpxに基本JSON型プロバイダを追加しようとしています。 現時点で私はJSON配列で苦労しています。次のテストケースを考えてみましょう:F#で提供される型のリストを作成
type SimpleArray = JSON< "{\"items\":[{\"id\":\"Open\"},{\"id\":\"Pause\"}]}">
let a = SimpleArray()
[<Test>]
let ``Can parse simple arrays``() =
a.items.[0].id
|> should equal "Open"
a.items.[1].id
|> should equal "Pause"
アイデアは、私はコレクション要素のタイプを取得するには、配列の最初の要素を使用したいということです。次に、この新しい型のリストを与えるSimpleArray型に "items"というプロパティを追加します。
コードはgithub repo Githubにあります。興味深い部分は38行目から始まります。JArrayにはネストされたJArraysも含まれる可能性があるため、全体を再帰的に表示する必要があります。
| JArray list ->
let newType = annotateAsJson list.[0] (runtimeType<obj> (ownerTy.Name + "_" + e.Key))
ownerTy.AddMember newType
Some(provideProperty
e.Key
newType // TODO: make this a list
(fun args -> Expr.Coerce(<@@ (%%args.[0] : obj) @@>, newType)) // TODO: return the list
:> MemberInfo)
おかげで、 ステファン
ありがとうございました。タイプは今修正されているようです。しかし、私はまだリストを返すのに困っている。私は文字列からFSharpListにInvalidCastExceptionを取得しています
@ forki23 - あなたは 'JArray list'とパターンマッチングしていて、プロパティの定義に決して' list'を使わないようです。おそらく、 'args。[0]'の代わりに 'list'を使って、あなたが作っている式に? – kvb
それは本当に奇妙です。私がこれを置き換えたとしても、私はまだそれを働かせません。私はここで何かを逃している。 – forki23