F# 转换顺序<;记录类型>;到xml?

F# 转换顺序<;记录类型>;到xml?,f#,f#-3.0,F#,F# 3.0,记录类型 type ARecordType = { Aaa: string; Bbb: string; Id: int; Ccc: string } 如何将其转换为Xml字符串 let recordTypeToXml (recordType: seq<ARecordType>) = ..... 让recordTypeToXml(recordType:seq)= ..... 返回 。。。。。。。。。。。 或 。。。。 或者它是可以处理任何记录类型的通用函数吗?您可以使

记录类型

type ARecordType = { Aaa: string; Bbb: string; Id: int; Ccc: string }
如何将其转换为Xml字符串

let recordTypeToXml (recordType: seq<ARecordType>) =
    .....
让recordTypeToXml(recordType:seq)=
.....
返回

。。。。。。。。。。。

。。。。

或者它是可以处理任何记录类型的通用函数吗?

您可以使用
CLIMutableAttribute
对记录进行修饰,以允许
XmlSerializer
对其进行处理。此外,我不确定是否序列化seq,但我已将其用于数组

open System.Xml.Serialization
open System.IO

[<CLIMutable>]
type ARecordType = { Aaa: string; Bbb: string; Id: int; Ccc: string }

let recordTypeToXml (recordType: ARecordType []) =
    let xmlSer = XmlSerializer(typeof<ARecordType []>)
    use ms = new MemoryStream()
    xmlSer.Serialize(ms, Array.ofSeq recordType)
    ms.Seek(0L, SeekOrigin.Begin) |> ignore

    use sr = new StreamReader(ms)
    sr.ReadToEnd()
open System.Xml.Serialization
开放系统
[]
类型ARecordType={Aaa:string;Bbb:string;Id:int;Ccc:string}
让recordTypeToXml(recordType:AreRecordType[])=
设xmlSer=XmlSerializer(typeof)
使用ms=newmemoryStream()
序列化(ms,Array.ofSeq记录类型)
ms.Seek(0升,SeekOrigin.Begin)|>忽略
使用sr=新的StreamReader(毫秒)
高级ReadToEnd()

您可以使用
CLIMutableAttribute
来装饰记录,以允许
XmlSerializer
处理该记录。此外,我不确定是否序列化seq,但我已将其用于数组

open System.Xml.Serialization
open System.IO

[<CLIMutable>]
type ARecordType = { Aaa: string; Bbb: string; Id: int; Ccc: string }

let recordTypeToXml (recordType: ARecordType []) =
    let xmlSer = XmlSerializer(typeof<ARecordType []>)
    use ms = new MemoryStream()
    xmlSer.Serialize(ms, Array.ofSeq recordType)
    ms.Seek(0L, SeekOrigin.Begin) |> ignore

    use sr = new StreamReader(ms)
    sr.ReadToEnd()
open System.Xml.Serialization
开放系统
[]
类型ARecordType={Aaa:string;Bbb:string;Id:int;Ccc:string}
让recordTypeToXml(recordType:AreRecordType[])=
设xmlSer=XmlSerializer(typeof)
使用ms=newmemoryStream()
序列化(ms,Array.ofSeq记录类型)
ms.Seek(0升,SeekOrigin.Begin)|>忽略
使用sr=新的StreamReader(毫秒)
高级ReadToEnd()

您可以使用
CLIMutableAttribute
来装饰记录,以允许
XmlSerializer
处理该记录。此外,我不确定是否序列化seq,但我已将其用于数组

open System.Xml.Serialization
open System.IO

[<CLIMutable>]
type ARecordType = { Aaa: string; Bbb: string; Id: int; Ccc: string }

let recordTypeToXml (recordType: ARecordType []) =
    let xmlSer = XmlSerializer(typeof<ARecordType []>)
    use ms = new MemoryStream()
    xmlSer.Serialize(ms, Array.ofSeq recordType)
    ms.Seek(0L, SeekOrigin.Begin) |> ignore

    use sr = new StreamReader(ms)
    sr.ReadToEnd()
open System.Xml.Serialization
开放系统
[]
类型ARecordType={Aaa:string;Bbb:string;Id:int;Ccc:string}
让recordTypeToXml(recordType:AreRecordType[])=
设xmlSer=XmlSerializer(typeof)
使用ms=newmemoryStream()
序列化(ms,Array.ofSeq记录类型)
ms.Seek(0升,SeekOrigin.Begin)|>忽略
使用sr=新的StreamReader(毫秒)
高级ReadToEnd()

您可以使用
CLIMutableAttribute
来装饰记录,以允许
XmlSerializer
处理该记录。此外,我不确定是否序列化seq,但我已将其用于数组

open System.Xml.Serialization
open System.IO

[<CLIMutable>]
type ARecordType = { Aaa: string; Bbb: string; Id: int; Ccc: string }

let recordTypeToXml (recordType: ARecordType []) =
    let xmlSer = XmlSerializer(typeof<ARecordType []>)
    use ms = new MemoryStream()
    xmlSer.Serialize(ms, Array.ofSeq recordType)
    ms.Seek(0L, SeekOrigin.Begin) |> ignore

    use sr = new StreamReader(ms)
    sr.ReadToEnd()
open System.Xml.Serialization
开放系统
[]
类型ARecordType={Aaa:string;Bbb:string;Id:int;Ccc:string}
让recordTypeToXml(recordType:AreRecordType[])=
设xmlSer=XmlSerializer(typeof)
使用ms=newmemoryStream()
序列化(ms,Array.ofSeq记录类型)
ms.Seek(0升,SeekOrigin.Begin)|>忽略
使用sr=新的StreamReader(毫秒)
高级ReadToEnd()

使用Linq到Xml非常简单:

let recordTypeToXml (recordType: seq<ARecordType>) = 
  XElement(XName.Get "Root",
    recordType |> Seq.map (fun {Aaa=a; Bbb=b; Ccc=c} ->
      XElement(XName.Get "Row",
        XAttribute(XName.Get "Aaa", a),
        XAttribute(XName.Get "Bbb", b),
        XAttribute(XName.Get "Ccc", c))))
让recordTypeToXml(recordType:seq)=
XElement(XName.Get“Root”,
记录类型|>Seq.map(fun{Aaa=a;Bbb=b;Ccc=c}->
XElement(XName.Get“行”,
XAttribute(XName.Get“Aaa”,a),
XAttribute(XName.Get“Bbb”,b),
XAttribute(XName.Get“Ccc”,c)))
您可以通过使用运算符或函数包装一些方法调用来将其缩短一点。例如,使用以下两个辅助函数:

let Element name (content: seq<_>) = XElement(XName.Get name, content)
let Attr name value = XAttribute(XName.Get name, value)
let元素名称(内容:seq)=XElement(XName.Get名称,内容)
让Attr name value=XAttribute(XName.Get name,value)
它干净多了:

let recordTypeToXml (recordType: seq<ARecordType>) = 
  Element "Root"
    [ for {Aaa=a; Bbb=b; Ccc=c} in recordType ->
        Element "Row" 
          [ Attr "Aaa" a
            Attr "Bbb" b
            Attr "Ccc" c ] ]
让recordTypeToXml(recordType:seq)=
元素“根”
[对于recordType中的{Aaa=a;Bbb=b;Ccc=c}而言->
元素“行”
[属性“Aaa”a
属性“Bbb”b
属性“Ccc”c]]

使用Linq到Xml非常简单:

let recordTypeToXml (recordType: seq<ARecordType>) = 
  XElement(XName.Get "Root",
    recordType |> Seq.map (fun {Aaa=a; Bbb=b; Ccc=c} ->
      XElement(XName.Get "Row",
        XAttribute(XName.Get "Aaa", a),
        XAttribute(XName.Get "Bbb", b),
        XAttribute(XName.Get "Ccc", c))))
让recordTypeToXml(recordType:seq)=
XElement(XName.Get“Root”,
记录类型|>Seq.map(fun{Aaa=a;Bbb=b;Ccc=c}->
XElement(XName.Get“行”,
XAttribute(XName.Get“Aaa”,a),
XAttribute(XName.Get“Bbb”,b),
XAttribute(XName.Get“Ccc”,c)))
您可以通过使用运算符或函数包装一些方法调用来将其缩短一点。例如,使用以下两个辅助函数:

let Element name (content: seq<_>) = XElement(XName.Get name, content)
let Attr name value = XAttribute(XName.Get name, value)
let元素名称(内容:seq)=XElement(XName.Get名称,内容)
让Attr name value=XAttribute(XName.Get name,value)
它干净多了:

let recordTypeToXml (recordType: seq<ARecordType>) = 
  Element "Root"
    [ for {Aaa=a; Bbb=b; Ccc=c} in recordType ->
        Element "Row" 
          [ Attr "Aaa" a
            Attr "Bbb" b
            Attr "Ccc" c ] ]
让recordTypeToXml(recordType:seq)=
元素“根”
[对于recordType中的{Aaa=a;Bbb=b;Ccc=c}而言->
元素“行”
[属性“Aaa”a
属性“Bbb”b
属性“Ccc”c]]

使用Linq到Xml非常简单:

let recordTypeToXml (recordType: seq<ARecordType>) = 
  XElement(XName.Get "Root",
    recordType |> Seq.map (fun {Aaa=a; Bbb=b; Ccc=c} ->
      XElement(XName.Get "Row",
        XAttribute(XName.Get "Aaa", a),
        XAttribute(XName.Get "Bbb", b),
        XAttribute(XName.Get "Ccc", c))))
让recordTypeToXml(recordType:seq)=
XElement(XName.Get“Root”,
记录类型|>Seq.map(fun{Aaa=a;Bbb=b;Ccc=c}->
XElement(XName.Get“行”,
XAttribute(XName.Get“Aaa”,a),
XAttribute(XName.Get“Bbb”,b),
XAttribute(XName.Get“Ccc”,c)))
您可以通过使用运算符或函数包装一些方法调用来将其缩短一点。例如,使用以下两个辅助函数:

let Element name (content: seq<_>) = XElement(XName.Get name, content)
let Attr name value = XAttribute(XName.Get name, value)
let元素名称(内容:seq)=XElement(XName.Get名称,内容)
让Attr name value=XAttribute(XName.Get name,value)
它干净多了:

let recordTypeToXml (recordType: seq<ARecordType>) = 
  Element "Root"
    [ for {Aaa=a; Bbb=b; Ccc=c} in recordType ->
        Element "Row" 
          [ Attr "Aaa" a
            Attr "Bbb" b
            Attr "Ccc" c ] ]
让recordTypeToXml(recordType:seq)=
元素“根”
[对于recordType中的{Aaa=a;Bbb=b;Ccc=c}而言->
元素“行”
[属性“Aaa”a
属性“Bbb”b
属性“Ccc”c]]

使用Linq到Xml非常简单:

let recordTypeToXml (recordType: seq<ARecordType>) = 
  XElement(XName.Get "Root",
    recordType |> Seq.map (fun {Aaa=a; Bbb=b; Ccc=c} ->
      XElement(XName.Get "Row",
        XAttribute(XName.Get "Aaa", a),
        XAttribute(XName.Get "Bbb", b),
        XAttribute(XName.Get "Ccc", c))))
让recordTypeToXml(recordType:seq)=
XElement(XName.Get“Root”,
记录类型|>Seq.map(fun{Aaa=a;Bbb=b;Ccc=c}->
XElement(XName.Get“行”,
XAttribute(XName.Get“Aaa”,a),
XAttribute(XName.Get“Bbb”,b),
XAttribute(XName.Get“Ccc”,c)))
您可以通过使用运算符或函数包装一些方法调用来将其缩短一点。例如,使用以下两个辅助函数:

let Element name (content: seq<_>) = XElement(XName.Get name, content)
let Attr name value = XAttribute(XName.Get name, value)
let元素名称(内容:seq)=XElement(XName.Get名称,内容)
让Attr name value=XAttribute(XName.Get name,value)
它干净多了:

let recordTypeToXml (recordType: seq<ARecordType>) = 
  Element "Root"
    [ for {Aaa=a; Bbb=b; Ccc=c} in recordType ->
        Element "Row" 
          [ Attr "Aaa" a
            Attr "Bbb" b
            Attr "Ccc" c ] ]
let