我從一個Web服務下面的XML,我想轉換爲.NET對象:反序列化與F#
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服務從來沒有使用屬性來發送信息,它似乎都是元素內的元素,這可能會使這個問題更容易。如果我以這種錯誤的方式進行討論,請隨時提出更好的建議。
由於提前,
鮑勃
謝謝,這解決了我的問題的一部分,但另一部分是從這個.net對象的最佳方式。將此xml轉換爲LogInResponse類型的最佳方法是什麼?我不確定以某種方式處理元素中元素的最佳方式,以便在其他響應包含某些相同元素時重用代碼。我從我的xml字符串中刪除了accounts元素來簡化事情。 – Beaker 2011-04-01 02:16:52
我終於放棄了試圖從我的xml中獲取域對象。因爲你至少回答了我的問題的一部分,所以我將其標記爲答案。 – Beaker 2011-04-03 01:58:08
順便說一句,我使用Linq to Xml來獲取域對象,如果有人對我如何解決我的問題感到好奇。 – Beaker 2011-04-03 01:58:49