Нет, нет.Я закончил делать это вручную.К счастью, я использую F #, так что это было легко.Если вы посмотрите на код, чтобы сделать это в javascript, он делает это с такой же легкостью (не нужно размышлять).
let applyFixups (json : JSON_RPC<JSONArrayList<_>>) =
let applyFixup (items : array<_>) (fixup : array<array<obj>>) =
let sourceIdx = fixup.[1].[1] :?> int
let destIdx = fixup.[0].[1] :?> int
let sourceProp = fixup.[1].[2] :?> string
let destProp = fixup.[0].[2] :?> string
let value = items.[sourceIdx].GetType().GetProperty(sourceProp).GetGetMethod().Invoke(items.[sourceIdx], Array.empty)
items.[destIdx].GetType().GetProperty(destProp).GetSetMethod().Invoke(items.[destIdx], [|value|]) |> ignore
()
if json.fixups <> null then
let fu = json.fixups
Seq.iter (applyFixup json.result.list) fu
()
Типы для этого следующие:
[<DataContract>]
type JSON_RPC<'T> = {
[<DataMember>]
mutable fixups : array<array<array<obj>>>
[<DataMember>]
mutable id : int
[<DataMember>]
mutable result : 'T
}
[<DataContract>]
type JSONArrayList<'T> = {
[<DataMember>]
mutable javaClass: string
[<DataMember>]
mutable list: 'T array
}