f# - how to XML-Serialize array of an array in FSharp -


here's i'm looking for:

<reports>   <parameters>     <parameter name="srid" type="java.lang.integer">16533</parameter>     <parameter name="pmid" type="java.lang.integer">17018</parameter>     <parameter name="start" type="java.text.simpledateformat">1/1/2011 12:00:00 am</parameter>     <parameter name="end" type="java.text.simpledateformat">1/31/2011 12:00:00 am</parameter>   </parameters>   <parameters>     <parameter name="srid" type="java.lang.integer">16099</parameter>     <parameter name="pmid" type="java.lang.integer">17018</parameter>     <parameter name="start" type="java.text.simpledateformat">1/1/2011 12:00:00 am</parameter>     <parameter name="end" type="java.text.simpledateformat">1/31/2011 12:00:00 am</parameter>   </parameters> </reports> 

but instead, here's i'm getting:

<reports>     <parameters>       <parameters>         <parameter name="srid" type="java.lang.integer">16533</parameter>         <parameter name="pmid" type="java.lang.integer">17018</parameter>         <parameter name="start" type="java.text.simpledateformat">1/1/2011 12:00:00 am</parameter>         <parameter name="end" type="java.text.simpledateformat">1/31/2011 12:00:00 am</parameter>       </parameters>     </parameters>     <parameters>       <parameters>         <parameter name="srid" type="java.lang.integer">16677</parameter>         <parameter name="pmid" type="java.lang.integer">17018</parameter>         <parameter name="start" type="java.text.simpledateformat">1/1/2011 12:00:00 am</parameter>         <parameter name="end" type="java.text.simpledateformat">1/31/2011 12:00:00 am</parameter>       </parameters>     </parameters> </reports> 

it seems have <parameters> tag.

here's whole model:

type parameter(paramname, javatype, paramvalue) =     let mutable pname = paramname     let mutable ptype = javatype     let mutable pvalue = paramvalue      public new() =          new parameter("","","")      [<xmlattributeattribute("name")>]         member this.pname get() = pname , set v = pname <- v      [<xmlattributeattribute("type")>]     member this.ptype get() = ptype , set v = ptype <- v      [<xmltext>]     member this.pvalue get() = pvalue , set v = pvalue <- v  type parameters(parameters: parameter array) =     let mutable paramarray = parameters      public new() =          new parameters(array.empty)      [<xmlarray "parameters">]     member this.paramarray get() = paramarray , 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 get() = parms , set v = parms <- v 

ok, simplified types little cleaner:

type parameter(paramname) =    let mutable pname = paramname     public new() =      new parameter("")     [<xmlattribute("name")>]        member this.pname get() = pname , set v = pname <- v   type parameters(parameters: parameter array) =    let mutable paramarray = parameters     public new() =      new parameters(array.empty)     [<xmlelement "parameter">]    member this.paramarray get() = paramarray , 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 get() = parms , set v = parms <- v 

and 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


Comments

Popular posts from this blog

javascript - Enclosure Memory Copies -

php - Replacing tags in braces, even nested tags, with regex -