LINQ to XML を使ってみた(VB.NET)
またまた備忘録です。WebRequest で XML 取得しごりごりデシリアライズしてたのを、LINQ to XML で書き直してみました。感想・・・凄くすっきりしたコードになりますね!
元コード。WebRequest を使ってXMLを取得、XmlTextReader に読み込んで、ごりごりデシリアライズしてます。
Imports System.Collections.Generic Imports System.Xml Imports System.Xml.Serialization Public Class Holiday <XmlElement("date", GetType(Date))> Property Day As Date <XmlElement("name", GetType(String))> Property Name As String End Class Public Class Holidays Public Shared Function GetHoliday() As List(Of holiday) DIm holidayList As New List(Of holiday) Dim webreq = System.Net.WebRequest.Create(New Uri(searchHolidayUrl)) Using webres = webreq.GetResponse(), st = webres.GetResponseStream() Dim reader As New XmlTextReader(st) Dim serializer As New System.Xml.Serialization.XmlSerializer( GetType(Holiday), New System.Xml.Serialization.XmlRootAttribute("holiday") ) While (reader.Read()) If (reader.Name = "holiday") Then Dim result = CType(serializer.Deserialize(reader), Holiday) If (result IsNot Nothing) Then holidayList.Add(result) End If End If End While End Using Return holidayList End Function End Class
LINQ to XML 使ったらこうなった。えらいすっきりしましたね。こりゃLINQ星人増えるの無理ないわw
Imports System.Xml.Linq Public Class Holiday Property Day As Date Property Name As String End Class Public Class Holidays Public Shared Function GetHoliday() As IEnumerable(Of Holiday) Dim element = XElement.Load(searchHolidayUrl) Dim holidays = From e In element.Elements Select New Holiday() With { .Day = CDate(e.Element("date").Value), .Name = e.Element("name").Value } Return holidays End Function End Class