我需要将任意记录序列化为映射/字典。
我想我的终结者是这样的:
type TabularData= array<Map<string, obj>>但在构建一个接受任何记录并将其转换为Map的泛型函数时,我遇到了问题。
发布于 2015-06-17 15:49:37
在实践中,最好的建议可能是使用一些现有的序列化库,比如FsPickler。但是,如果您真的想为记录编写自己的序列化,那么GetRecordFields (如注释中所提到的)是最好的选择。
下面是一个记录,并创建一个从string字段名到字段的obj值的映射。请注意,它不处理嵌套记录,而且速度也不是特别快:
open Microsoft.FSharp.Reflection
let asMap (recd:'T) =
[ for p in FSharpType.GetRecordFields(typeof<'T>) ->
p.Name, p.GetValue(recd) ]
|> Map.ofSeq下面是一个用一个简单的记录来调用它的小例子:
type Person =
{ Name : string
Age : int }
asMap { Name = "Tomas"; Age = -1 }发布于 2016-07-04 12:35:13
使用Tomas提到的相同想法,您可以从这样的记录创建一个IDictionary<K,V>:
let asDictionary (entity: 'T) =
seq {
for prop in FSharpType.GetRecordFields(typeof<'T>) ->
prop.Name, prop.GetValue(entity)
} |> dicthttps://stackoverflow.com/questions/30895624
复制相似问题