Исправления JABSORB в .NET - PullRequest
       3

Исправления JABSORB в .NET

2 голосов
/ 14 октября 2010

Есть ли какой-либо встроенный способ применения «исправлений», которые JABSORB генерирует с использованием десериализации json в .NET?

1 Ответ

0 голосов
/ 15 ноября 2010

Нет, нет.Я закончил делать это вручную.К счастью, я использую 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...