F # составление словаряиз десериализованного JSON - PullRequest
0 голосов
/ 02 февраля 2019

В F # я использую JavascriptSerializer.DeserializeObject для чтения в файл JSON.Это дает мне Dictionary<string, object>, и для любого такого значения (которое может быть во время выполнения int, string, bool и т. Д.) Во время компиляции я знаю только, что это объект.

Я знаю, что для моего ввода определенные ключи всегда будут иметь определенные типы, связанные с ними, но для перевода требуется довольно некрасивый код.Например:

// deserialize the text, casting to a dictionary
let parsed = ... :?> Dictionary<string, System.Object>

type MyValue =
    | Scalar of string
    | Array of string[]

// myValue may be either string or string[]
// convert to F# discriminated union of Scalar|Array
let myValue = match parsed.["myValue"] with
    | :? (Object[]) as obj -> Array (obj |> Array.map (fun o -> o :?> string))
    | obj -> Scalar (obj :?> string)

Есть ли более чистый, возможно, более безопасный идиоматичный способ сделать это, все еще используя JavascriptSerializer?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...