gpt4 book ai didi

serialization - F#:记录查询字符串

转载 作者:行者123 更新时间:2023-12-02 08:21:19 25 4
gpt4 key购买 nike

我正在寻找一个现有的解决方案来序列化记录以查询字符串,但一无所获。我知道 F# 的 pretty-print ,但我不知道如何手动访问它。

通常我想要这样的东西:

type Person = {first:string; last:string}
type Group = {name:string; size:int}

let person = {first="Mary"; last="Smith"}
let personQueryString = Something.toQueryString person

let group = {name="Full"; size=345}
let groupQueryString = Something.toQueryString group

在哪里

personQueryString -> "first=Mary&last=Smith"
groupQueryString -> "name=Full&size=345"

最佳答案

我认为不存在这样的函数,但您可以编写一个使用反射的函数:

open System.Reflection

module Something =
let toQueryString x =
let formatElement (pi : PropertyInfo) =
sprintf "%s=%O" pi.Name <| pi.GetValue x
x.GetType().GetProperties()
|> Array.map formatElement
|> String.concat "&"

由于它使用了反射,所以它不如预先知道类型的专用函数那么高效,所以这是否足以满足您的需求,只有您自己知道。

虽然它产生了预期的结果:

> let person = {first="Mary"; last="Smith"};;

val person : Person = {first = "Mary";
last = "Smith";}

> let personQueryString = Something.toQueryString person;;

val personQueryString : string = "first=Mary&last=Smith"

> let group = {name="Full"; size=345};;

val group : Group = {name = "Full";
size = 345;}

> let groupQueryString = Something.toQueryString group;;

val groupQueryString : string = "name=Full&size=345"

关于serialization - F#:记录查询字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36828859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com