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
Post a Comment