本文介绍了如何在FSharp中对数组的数组进行XML序列化的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这就是我要寻找的东西:

here's what 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 what 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>

似乎我还有一个<parameters>标记.

这是我的整个模特:

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 with get() = pName and set v = pName <- v

    [<XmlAttributeAttribute("type")>]
    member this.PType with get() = pType and set v = pType <- v

    [<XmlText>]
    member this.PValue with get() = pValue and set v = pValue <- v

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

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

    [<XmlArray "parameters">]
    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

推荐答案

好的,所以我简化了您的类型,使其看起来更简洁:

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

然后将其序列化:

    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)

产生:

<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,亚历克斯

这篇关于如何在FSharp中对数组的数组进行XML序列化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

11-02 01:05