我从要转换为 .net 对象的 Web 服务中获取以下 xml:
let xmlString = "<?xml version=\"1.0\"?>
<logInResponse>
<result>OK</result>
<xmlLogIn>
<session>11C0ED6F8F7288855FC73C99979A9732.TOGKE6VP9aE8abcdLXaVXg</session>
<user>WallStreetScumbag1</user>
<authorizations>
<insiderTrading>true</insiderTrading>
</authorizations>
</xmlLogIn>
</logInResponse>"
这是我到目前为止所拥有的:
type Result(value:XmlNode) =
member this.Value = value.InnerText
let (|Node|Result|) (node : #System.Xml.XmlNode) =
if node.Name = "result" then
Result (new Result(node))
else
Node (seq {for x in node.ChildNodes -> x})
let extract node =
let rec extract node =
match node with
| Result(p) ->
Seq.singleton p
| Node(nodes) ->
Seq.collect (fun (n) -> extract n) nodes
extract node
let xmlDoc = new XmlDocument()
xmlDoc.LoadXml(xmlString)
//type LogIn() =
//This is where I would create a .net object that mirrors the xml.
正如您所看到的,某些元素在不同的元素中重复,有时元素不包括可以显示的所有元素,如您在我的示例 xml 中看到的那样。这个相同的 Web 服务还将在其他类型的响应中重用许多相同的元素。是否可以使用活动模式来创建一种通用方法来反序列化我返回到对象的 xml?看起来这个 Web 服务从不使用属性来发送信息,它似乎都是元素中的元素,这可能会使这个问题变得更容易。如果我以错误的方式解决这个问题,请随时提出更好的建议。
提前致谢,
鲍勃