■57775 / inTopicNo.1) |
XMLのシリアライズ・デシリアライズ について |
□投稿者/ tecc (17回)-(2011/03/15(Tue) 11:45:33)
|
分類:[.NET 全般]
C#.NET VS2010です。
://developer.yahoo.co.jp/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace YahooAPI
{
public class YahooBase
{
private string _AppID;
public YahooBase(string _appid)
{
AppID = _appid;
}
/// <summary>
/// アプリケーションID
/// </summary>
public string AppID
{
get { return _AppID; }
set
{
if (_AppID != string.Empty)
{
_AppID = value;
}
}
}
public YahooNewsResultSet NewsSearch
(string _appid, string _query, int _relatedinformation, string _sort, int _results, int _start)
{
string requestUrl = string.Format
("http://news.yahooapis.jp/NewsWebService/V2/topics?" +
"appid={0}&query={1}&relatedinformation={2}&sort={3}&results={4}&start={5}",
_appid,_query, _relatedinformation, _sort, _results, _start);
YahooNewsResultSet resultset = null;
System.Net.HttpWebRequest request = System.Net.WebRequest.Create(requestUrl) as System.Net.HttpWebRequest;
using (System.Net.HttpWebResponse response = request.GetResponse() as System.Net.HttpWebResponse)
{
using (System.IO.Stream responseStream = response.GetResponseStream())
{
//System.IO.StreamReader reader = new System.IO.StreamReader(responseStream);
//Console.WriteLine(reader.ReadToEnd());
System.Xml.Serialization.XmlSerializer serializer =
new System.Xml.Serialization.XmlSerializer(typeof(YahooNewsResultSet));
resultset = serializer.Deserialize(responseStream) as YahooNewsResultSet;
}
}
return resultset;
}
}
}
using System;
using System.Collections.Generic;
using System.Xml.Serialization;
namespace YahooAPI
{
/// <summary>
/// 結果セット
/// </summary>
/// <remarks>
/// XMLスキーマの結果セットを得ます。
/// </remarks>
[System.Xml.Serialization.XmlTypeAttribute(Namespace="urn:yahoo:jp:news")]
[System.Xml.Serialization.XmlRootAttribute(Namespace="urn:yahoo:jp:news", IsNullable=false)]
public class YahooNewsResultSet
{
//結果セット
[System.Xml.Serialization.XmlElementAttribute("Result")]
public ResultType[] Result;
//該当件数の総個数
[System.Xml.Serialization.XmlAttributeAttribute(DataType = "integer")]
public string TotalResultAvailable;
//返された値の個数
[System.Xml.Serialization.XmlAttributeAttribute(DataType = "integer")]
public string TotalResultsReturned;
//最初のデータが何個目にあたるか
[System.Xml.Serialization.XmlAttributeAttribute(DataType = "integer")]
public string FirstResultPostion;
}
[System.Xml.Serialization.XmlTypeAttribute(Namespace="urn:yahoo:news")]
public class ResultType
{
//トピックの見出しID
public string HeadLineID;
//最終更新日時
public string DateTime;
//トピックの作成日時
public string CreateTime;
//トピックのニュースの最終更新日時
public string NewsUpdateTime;
//トピックの関連情報の最終更新日時
public string RelatedUpdateTime;
//トピックの見出し
public string Title;
//トピックの関連キーワード
public string KeyWord;
//具体的なキーワード
public string Word;
//トピックの日本語表記
public string TopicName;
//トピックの英語表記
public string English;
//話題の単位であるトピックについての数十文字の簡単な説明
public string OverView;
//トピックが所属するカテゴリ
public string Category;
//サブカテゴリ
public string SubCategory;
//具体的なサブカテゴリ名
public string Sub;
//トピックのURL
public string URL;
//掲載されたカテゴリ
public string PickupCategory;
//掲載されたときの表示順位
public string PickupOrder;
//PV指標
public string PvIndex;
//関連情報がエディターによって更新された回数
public string EditNum;
//掲載されているニュースの件数
public string NewsNum;
//ニュース一覧ページのURL
public string NewsUrl;
//関連情報
public string RelatedInformation;
//関連情報の帯
public string TotalNum;
//関連情報の帯名
public string RelatedInfoTitle;
//関連情報の帯名のURL
public string RelatedInfoUrl;
//関連情報の本文
public string RelatedInfoText;
//スマートフォン最適化ページ
public string SmartphoneUrl;
}
}
<ResultSet xsi:schemaLocation="urn:yahoo:jp:news http://news.yahooapis.jp/NewsWebService/V2/topics.xsd" totalResultsAvailable="9" totalResultsReturned="9" firstResultPosition="1">
−
<Result>
<HeadlineId/>
<DateTime>2011-03-15T09:07:57</DateTime>
<CreateTime>2008-07-02T22:34:43</CreateTime>
<NewsUpdateTime>2011-03-15T09:07:57</NewsUpdateTime>
<RelatedInfoUpdateTime>2011-03-12T16:25:29</RelatedInfoUpdateTime>
<HeadlineUpdateTime>2011-03-15T07:31:00</HeadlineUpdateTime>
<Title/>
<Keyword/>
<TopicName>地震</TopicName>
<English>earthquake</English>
<Overview>地震被害に関するニュース。発生時の速報や震度情報。</Overview>
<Category>国内</Category>
−
<SubCategory>
<Sub>東日本大震災</Sub>
<Sub>東日本大震災</Sub>
<Sub>気象と災害</Sub>
</SubCategory>
−
<Url>
http://dailynews.yahoo.co.jp/fc/domestic/earthquake/
</Url>
<PickupCategory/>
<PickupOrder/>
<PvIndex>0</PvIndex>
<EditNum>91</EditNum>
<NewsNum>398</NewsNum>
−
<NewsUrl>
http://dailynews.yahoo.co.jp/fc/domestic/earthquake/news_list/?pn=1
</NewsUrl>
−
<RelatedInformation>
<TotalNum>8</TotalNum>
<RelatedInfoTitle>*現在の地震情報</RelatedInfoTitle>
−
<RelatedInfoUrl>
http://dailynews.yahoo.co.jp/fc/domestic/earthquake/#infoHeader1
</RelatedInfoUrl>
<RelatedInfoTitle>*地震発生のメカニズム</RelatedInfoTitle>
−
<RelatedInfoUrl>
http://dailynews.yahoo.co.jp/fc/domestic/earthquake/#infoHeader2
</RelatedInfoUrl>
<RelatedInfoTitle>*地震の種類</RelatedInfoTitle>
−
<RelatedInfoUrl>
http://dailynews.yahoo.co.jp/fc/domestic/earthquake/#infoHeader3
</RelatedInfoUrl>
<RelatedInfoTitle>*地震の大きさ</RelatedInfoTitle>
−
<RelatedInfoUrl>
http://dailynews.yahoo.co.jp/fc/domestic/earthquake/#infoHeader4
</RelatedInfoUrl>
<RelatedInfoTitle>*行政機関等の対策</RelatedInfoTitle>
−
<RelatedInfoUrl>
http://dailynews.yahoo.co.jp/fc/domestic/earthquake/#infoHeader5
</RelatedInfoUrl>
<RelatedInfoTitle>*統計データ</RelatedInfoTitle>
−
<RelatedInfoUrl>
http://dailynews.yahoo.co.jp/fc/domestic/earthquake/#infoHeader6
</RelatedInfoUrl>
<RelatedInfoTitle>*過去の大地震</RelatedInfoTitle>
−
<RelatedInfoUrl>
http://dailynews.yahoo.co.jp/fc/domestic/earthquake/#infoHeader7
</RelatedInfoUrl>
<RelatedInfoTitle>*関連トピックス</RelatedInfoTitle>
−
<RelatedInfoUrl>
http://dailynews.yahoo.co.jp/fc/domestic/earthquake/#infoHeader8
</RelatedInfoUrl>
</RelatedInformation>
−
<SmartphoneUrl>
http://dailynews.yahoo.co.jp/iphone/domestic/earthquake/
</SmartphoneUrl>
</Result>
このようなXMLをデシリアライズしてから、ResultSetクラスに変換して返したいのですが
ResultSetに代入しようとした所で
XML ドキュメント (2,2) でエラーが発生しました。ってでます。
なんででしょう?教えて下さい。
後、これは気が向いたらでいいんですが、このようなクラスを作ってシリアライズ/デシリアライズしたデータを管理する手法は
なんか呼び名?があったりするんでしょうか?
よろしくお願いします。
|
|