質問
C#を用いてXMLデータ(string文字列)を解析し、オブジェクト(のリスト)に変換したいと思っています。
変換にはSystem.Xml.Serialization
を使用しています。
変換作業時にエラーが発生し対処方法がわからないため質問します。
やりたいこと
Yahoo!知恵袋のAPIを用いて取得した新着質問リスト(XML)をクラスオブジェクトに変換します。
XMLサンプル(「サンプルレスポンス」の箇所です)
http://developer.yahoo.co.jp/webapi/chiebukuro/chiebukuro/v1/getnewquestionlist.html
xml
1<?xml version="1.0" encoding="UTF-8"?> 2<ResultSet xmlns="urn:yahoo:jp:chiebukuro" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:yahoo:jp:chiebukuro" totalResultsAvailable="42410" totalResultsReturned="2" firstResultPosition="1"> 3 <Result> 4 <QuestionId>123456789</QuestionId> 5 <QuestionUrl>http://detail.chiebukuro.yahoo.co.jp/rd/q123456789</QuestionUrl> 6 <Content><![CDATA[破れたお金は交換してもらえますか? 7 8お金を子どもがびりびりに破いてしまいました。 9破れたお金でもどこかで交換してくれると聞いたことがありますが、本当ですか?]]></Content> 10 <CategoryId>2078297847</CategoryId> 11 <Category><![CDATA[数学]]></Category> 12 <CategoryPath><![CDATA[教養と学問、サイエンス|数学、サイエンス|数学]]></CategoryPath> 13 <AnsCount>0</AnsCount> 14 <IsMobile>false</IsMobile> 15 <HasImage>false</HasImage> 16 <Coin>500</Coin> 17 <UpdatedDate>2011-01-01T00:00:01+09:00</UpdatedDate> 18 </Result> 19 <Result> 20 <QuestionId>123456789</QuestionId> 21 <QuestionUrl>http://detail.chiebukuro.yahoo.co.jp/rd/q123456789</QuestionUrl> 22 <Content><![CDATA[破れたお金は交換してもらえますか? 23 24お金を子どもがびりびりに破いてしまいました。 25破れたお金でもどこかで交換してくれると聞いたことがありますが、本当ですか?]]></Content> 26 <CategoryId>2078297819</CategoryId> 27 <Category><![CDATA[あいさつ、てがみ、文例]]></Category> 28 <CategoryPath><![CDATA[マナー、冠婚葬祭|マナー|あいさつ、てがみ、文例]]></CategoryPath> 29 <AnsCount>0</AnsCount> 30 <IsMobile>false</IsMobile> 31 <HasImage>false</HasImage> 32 <Coin>50</Coin> 33 <UpdatedDate>2011-01-01T00:00:00+09:00</UpdatedDate> 34 </Result> 35</ResultSet>
実装
XMLデータをクラスに変換するため、以下のように実装しました。
[記事(Result)の一覧(ResultSet)を管理するクラス]
cs
1 [System.Xml.Serialization.XmlRoot("ResultSet")] 2 public class ChieArticleList 3 { 4 [System.Xml.Serialization.XmlElement("Result")] 5 public List<ChieArticle> Articles { get; set; } 6 }
[記事(Result)クラス]
cs
1 public class ChieArticle 2 { 3 [System.Xml.Serialization.XmlElement("QuestionId")] 4 public string QuestionId { get; set; } 5 6 [System.Xml.Serialization.XmlElement("QuestionUrl")] 7 public string QuestionUrl { get; set; } 8 9 [System.Xml.Serialization.XmlElement("Content")] 10 public string Content { get; set; } 11 }
[メイン処理]
cs
1// 注:ここにXMLが文字列の状態で入っているとします。 2string strXml = ** XMLDATA **; 3 4TextReader reader = new StringReader(strXml); 5XmlSerializer serializer = new XmlSerializer(typeof(ChieArticleList)); 6ChieArticleList articles = (ChieArticleList)serializer.Deserialize(reader);
問題
上記のプログラムを実行すると、以下の処理時にInvalidOperationException
が発生します。
ChieArticleList articles = (ChieArticleList)serializer.Deserialize(reader);
例外の詳細(InnerException)を見ると、{"<ResultSet xmlns='urn:yahoo:jp:chiebukuro'> は指定できません。"}
となっていました。
XMLが解析されクラスオブジェクトに変換されている想定でした。
なぜこのようなエラーが発生するのでしょうか。
参考資料
XmlSerializerの使用にあたり、以下のサイトを参考にしました。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。