C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: XMLのシリアライズ・デシリアライズ について


(過去ログ 97 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■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) でエラーが発生しました。ってでます。

なんででしょう?教えて下さい。
後、これは気が向いたらでいいんですが、このようなクラスを作ってシリアライズ/デシリアライズしたデータを管理する手法は
なんか呼び名?があったりするんでしょうか?

よろしくお願いします。


引用返信 編集キー/
■57776 / inTopicNo.2)  Re[1]: XMLのシリアライズ・デシリアライズ について
□投稿者/ 魔界の仮面弁士 (2130回)-(2011/03/15(Tue) 12:24:40)
No57775 (tecc さん) に返信
> XML ドキュメント (2,2) でエラーが発生しました。ってでます。
> なんででしょう?教えて下さい。
そもそもの XML が間違っているからでは無いでしょうか。
xsi 名前空間が未定義ですし、ResultSet 要素の終タグも見当たりません。
引用返信 編集キー/
■57777 / inTopicNo.3)  Re[2]: XMLのシリアライズ・デシリアライズ について
□投稿者/ マサヤ (283回)-(2011/03/15(Tue) 12:32:19)
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
とか、ResultSet にいれてみたらいかがでしょうか?
引用返信 編集キー/
■57779 / inTopicNo.4)  Re[3]: XMLのシリアライズ・デシリアライズ について
□投稿者/ tecc (19回)-(2011/03/15(Tue) 13:25:56)
No57776 (魔界の仮面弁士 さん) に返信
そもそもの XML が間違っているからでは無いでしょうか。
xsi 名前空間が未定義ですし、ResultSet 要素の終タグも見当たりません。

ResultSetの要素タグはコピペミスです。申し訳ないです。


No57777 (マサヤ さん) に返信 ■No57776 (魔界の仮面弁士 さん) に返信
> xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> とか、ResultSet にいれてみたらいかがでしょうか?


XML自体が間違っているという事ですが、YahooデベロッパーのAPIを使用しているので
間でどうにかしてXMLに対して名前空間を加えてあげれば良いのでしょうか?

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -