VB.NETでXMLをデシリアライズするときのパターンまとめ
XMLでデシリアライズする方法を書いた記事があまりなかったので少しまとめてみました。
デシリアライズができれば簡単にクラスとマッピングできて楽ちんです。
1階層の基本を覚えておけば、2階層移行ネストしていても使えます。
プロパティの型は、Stringですが適宜他の型に置換して下さい。
環境
VisualStuido | 2010 |
---|---|
.NET Framework | 4.0 |
デシリアライズ
コード
'XDocument使用時 Dim xml As String = "" Dim xdoc As XDocument = XDocument.Parse(xml, LoadOptions.None); Dim serializer As New XmlSerializer(GetType(User)) Dim user As User = serializer.Deserialize(xdoc.CreateReader) 'XElement使用時 Dim xelementAs XElement= XElement.Parse(xml); Dim serializer As New XmlSerializer(GetType(User)) Dim user As User = serializer.Deserialize(xelement.CreateReader)
階層なし
<root> <id></id> <name></name> </root>
<Serializable()> Public Class User <XmlElement()> Public Property id As String <XmlElement()> Public Property name As String End Class
1階層のリスト
<root> <user> <id></id> <name></name> </user> </root> ------------------------- <root> <user> <id></id> <name></name> </user> <user> <id></id> <name></name> </user> </root>
<Serializable()> Public Class Root <XmlElement("user")> Public Property users As List(Of User) End Class <Serializable()> Public Class User <XmlElement()> Public Property id As String <XmlElement()> Public Property name As String End Class
グルーピングのある1階層のリスト
<root> <users> <user> <id></id> <name></name> </user> <user> <id></id> <name></name> </user> </users> </root>
<Serializable()> Public Class Root <XmlArray("users")> <XmlArrayItem("user")> Public Property users As List(Of User) End Class <Serializable()> Public Class User <XmlElement()> Public Property id As String <XmlElement()> Public Property name As String End Class
XMLクラス
XDocument
正式なXMLでないと定義できません。
<?xml version="1.0" encoding="utf-8"?>
は必須です。
Dim xdoc As XDocument = <?xml version="1.0" encoding="utf-8"?> <root> <user> <id></id> <name></name> </user> </root>
XML属性
まとめ
XmlSerializeクラスを使うとXMLからオブジェクト、オブジェクトからXMLに簡単に変換できます。
XMLと対応するクラスの作成が面倒くさいですが、一度作ってしまうと使い回しが効くので便利です。
XMLと対応するクラスを作るとき、保守しやすいようにプロパティ名は、XMLのタグ・属性と同じ名称にするのが良いです。
VB.NETで予約語を使う場合、「[date]」というように角括弧を使います。
配列やリストなのでプロパティの属性に「XmlArray」を使うというわけではないことがわかりました。
他サイトでXmlSerializerクラスは、ネストしたものを扱えないとありましたが、普通に深い階層でも自動で値を設定してくれます。
今回、SOAPのAPIとのやりとりとのために使用しました。
別でSoapFormatterというクラスがあり、SOAPと相性がよく自動でなんでもやってくれると思ったら何もしてくれませんでした。
逆引き大全
Windows8/7完全対応 Visual Basic 2013逆引き大全―Visual Studio Professional 2013/Express 2013対応
- 作者: 増田智明,国本温子,池谷京子
- 出版社/メーカー: 秀和システム
- 発売日: 2013/12
- メディア: 単行本
- この商品を含むブログを見る
- 作者: 増田智明,国本温子,池谷京子
- 出版社/メーカー: 秀和システム
- 発売日: 2014/02
- メディア: 単行本
- この商品を含むブログ (1件) を見る