F# 如何在F中将obj转储为xml#
我尝试将C代码转换为F代码。F# 如何在F中将obj转储为xml#,f#,F#,我尝试将C代码转换为F代码。 但是失败了。 下面是一个名为 是关于FP的 我把它翻译成 #r "System.Core.dll" #r "System.Xml.Linq.dll" open System open System.Reflection open System.Collections open System.Collections.Generic open System.Xml.Linq let (|V|S|A|O|) o = if
但是失败了。
下面是一个名为 是关于FP的 我把它翻译成
#r "System.Core.dll"
#r "System.Xml.Linq.dll"
open System
open System.Reflection
open System.Collections
open System.Collections.Generic
open System.Xml.Linq
let (|V|S|A|O|) o =
if o.GetType().IsValueType then V
elif o.GetType()=typeof<string> then S
elif o.GetType().IsArray then A
else O
let rec obj2xml r o =
match o with
| V | S -> new XElement(r, o)
| A -> o |> Array.map (fun z -> obj2xml r z)
| O -> new XElement(r, o.GetType().GetProperties() |> Array.map (fun z -> obj2xml (z.Name) (z.GetValue(o, null))))
#r“System.Core.dll”
#r“System.Xml.Linq.dll”
开放系统
开放系统。反射
开放系统。集合
open System.Collections.Generic
open System.Xml.Linq
让(| V | S | A | O |)O=
如果o.GetType().IsValueType,则V
elif o.GetType()=类型,然后是S
elif o.GetType().IsArray然后是
埃尔索
让rec obj2xml r o=
匹配
|V | S->新元素(r,o)
|A->o |>Array.map(funz->obj2xmlrz)
|O->new-XElement(r,O.GetType().GetProperties()|>Array.map(fun z->obj2xml(z.Name)(z.GetValue(O,null)))
|V | S->新建元素(r,o)返回一个元素
|A->o|>Array.map(funz->obj2xmlrz)返回A数组
我想不出来!
我还没完成呢
请帮帮我 它不会编译的原因是
match
的所有分支都必须返回相同类型的对象。当前代码返回XElement
或数组
。由于函数的名称是obj2xml
,我猜正确的类型是XElement
这意味着您需要以某种方式将数组包装在XElement
中。我猜r
是“root”的缩写,因为所有其他返回的元素都将r
作为第一个参数,所以您应该传递它
| A -> o |> Array.map (fun z -> obj2xml r z)
// change to:
| A -> new XElement(r, o |> Array.map (fun z -> obj2xml r z))
顺便说一下,我不知道您是否正在使用VisualStudio编写此代码。如果是,则可能希望通过项目系统而不是
\r
编译器指令指定引用。它不编译的原因是匹配的所有分支都必须返回相同类型的对象。当前代码返回XElement
或数组
。由于函数的名称是obj2xml
,我猜正确的类型是XElement
这意味着您需要以某种方式将数组包装在XElement
中。我猜r
是“root”的缩写,因为所有其他返回的元素都将r
作为第一个参数,所以您应该传递它
| A -> o |> Array.map (fun z -> obj2xml r z)
// change to:
| A -> new XElement(r, o |> Array.map (fun z -> obj2xml r z))
顺便说一下,我不知道您是否正在使用VisualStudio编写此代码。如果是,那么您可能希望通过项目系统而不是\r
编译器指令来指定引用。“它不工作”不会让您走得很远。“不工作”到底是什么意思?你是说它的功能不正确,还是说它不编译/构建?“它不工作”不会让你走得很远。“不工作”到底是什么意思?你是说它的功能不正确还是说它没有编译/构建?