gpt4 book ai didi

f# - 如何在FSharp中以XML序列化数组的数组

转载 作者:行者123 更新时间:2023-12-02 04:11:23 32 4
gpt4 key购买 nike

这是我在寻找的东西:

<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>

但是,相反,这就是我得到的:
<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

最佳答案

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

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>

亚历克斯

关于f# - 如何在FSharp中以XML序列化数组的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4937811/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com