XMLでデシリアライズする方法を書いた記事があまりなかったので少しまとめてみました。
デシリアライズができれば簡単にクラスとマッピングできて楽ちんです。
1階層の基本を覚えておけば、2階層移行ネストしていても使えます。
プロパティの型は、Stringですが適宜他の型に置換して下さい。
環境
VisualStuido | 2010 |
---|---|
.NET Framework | 4.0 |
デシリアライズ
コード
'XDocument使用時Dim xml AsString=""Dim xdoc As XDocument = XDocument.Parse(xml, LoadOptions.None); Dim serializer AsNew XmlSerializer(GetType(User))Dim user As User = serializer.Deserialize(xdoc.CreateReader)'XElement使用時Dim xelementAs XElement= XElement.Parse(xml); Dim serializer AsNew XmlSerializer(GetType(User))Dim user As User = serializer.Deserialize(xelement.CreateReader)
階層なし
<root><id></id><name></name></root>
<Serializable()>Public Class User <XmlElement()>PublicProperty id AsString<XmlElement()>PublicPropertynameAsStringEnd 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")>PublicProperty users As List(Of User)End Class <Serializable()>Public Class User <XmlElement()>PublicProperty id AsString<XmlElement()>PublicPropertynameAsStringEnd 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")>PublicProperty users As List(Of User)End Class <Serializable()>Public Class User <XmlElement()>PublicProperty id AsString<XmlElement()>PublicPropertynameAsStringEnd 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件) を見る