how to XML-Serialize array of an array in FSharp

微笑、不失礼 提交于 2019-12-05 19:02:38

ok, so i simplified your types a little to look cleaner:

type parameter(paramName) =
   let mutable pName = paramName

   public new() = 
    new parameter("")

   [<XmlAttribute("name")>]    
   member this.PName with get() = pName and set v = pName <- v


type parameters(parameters: parameter array) =
   let mutable paramArray = parameters

   public new() = 
    new parameters(Array.empty)

   [<XmlElement "parameter">]
   member this.ParamArray with get() = paramArray and set v = paramArray <- v

[<XmlRoot("reports")>]
type reports(ps:parameters array) =
   let mutable parms = ps

   public new() =
    new reports(Array.empty)

   [<XmlElement("parameters")>] 
   member this.Ps with get() = parms and set v = parms <- v

and then to serialize these:

    let params1 = parameters ([|parameter("a"); parameter("b")|])
    let params2 = parameters ([|parameter("c"); parameter("d")|])

    let repos = reports ([|params1; params2|])

    use writer = System.Xml.XmlWriter.Create @"C:\temp\foo1.xml"
    let xs = System.Xml.Serialization.XmlSerializer typeof<reports>
    xs.Serialize (writer, repos)

produces:

<reports xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <parameters>
        <parameter name="a" />
        <parameter name="b" />
    </parameters>
    <parameters>
        <parameter name="c" />
        <parameter name="d" />
    </parameters>
</reports>

hth, alex

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!