名前空間 'http://schemas.datacontract.org/2004/07/xxx' の要素 'XXX' を指定してください。。名前が 'XXX'、名前空間が '' の 'Element' が検出されました。
e-Statが統計データのAPIを公開したみたい。
政府統計の総合窓口(e-Stat)-API機能
さっそく使ってみようと慣れないwebプログラムを書いてみたら、案の定エラーが出るわけです。
using (HttpClient hc = new HttpClient())
{
hc.BaseAddress = new Uri("http://api.e-stat.go.jp/");
HttpResponseMessage res = await hc.GetAsync("rest/1.0/app/getStatsList?appId=(ID)&lang=J&searchKind=1&searchWord=(キーワード)");
if (res.IsSuccessStatusCode)
{
object obj = await res.Content.ReadAsAsync(typeof(GET_STATS_LIST));
}
}
エラーはこちら。
System.Runtime.Serialization.SerializationException はハンドルされませんでした。
_HResult=-2146233076
_message=1 行目の位置 160 にエラーがあります。 名前空間 'http://schemas.datacontract.org/2004/07/estat02' の要素 'GET_STATS_LIST' を指定してください。。名前が 'GET_STATS_LIST'、名前空間が '' の 'Element' が検出されました。
HResult=-2146233076
IsTransient=false
Message=1 行目の位置 160 にエラーがあります。 名前空間 'http://schemas.datacontract.org/2004/07/estat02' の要素 'GET_STATS_LIST' を指定してください。。名前が 'GET_STATS_LIST'、名前空間が '' の 'Element' が検出されました。
Source=System.Runtime.Serialization
(以下省略)
名前空間が違うらしいのだけど、XMLの扱いなれていない人にはちんぷんかんぷん。
APIから受け取るXMLはこんな感じ。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<GET_STATS_LIST xsi:noNamespaceSchemaLocation="http://api.e-stat.go.jp/rest/1.0/schema/GetStatsList.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RESULT>
<STATUS>0</STATUS>
<ERROR_MSG>正常に終了しました。</ERROR_MSG>
<DATE>2014-11-01T23:48:09.333+09:00</DATE>
</RESULT>
<PARAMETER>
このXMLから作ったクラスはこんな感じ。
/// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
public partial class GET_STATS_LIST
{
private GET_STATS_LISTRESULT rESULTField;
private GET_STATS_LISTPARAMETER pARAMETERField;
Namespaceが空文字列になっているなあ。このあたりが原因か?
政府統計の総合窓口(e-Stat)-API機能
さっそく使ってみようと慣れないwebプログラムを書いてみたら、案の定エラーが出るわけです。
using (HttpClient hc = new HttpClient())
{
hc.BaseAddress = new Uri("http://api.e-stat.go.jp/");
HttpResponseMessage res = await hc.GetAsync("rest/1.0/app/getStatsList?appId=(ID)&lang=J&searchKind=1&searchWord=(キーワード)");
if (res.IsSuccessStatusCode)
{
object obj = await res.Content.ReadAsAsync(typeof(GET_STATS_LIST));
}
}
エラーはこちら。
System.Runtime.Serialization.SerializationException はハンドルされませんでした。
_HResult=-2146233076
_message=1 行目の位置 160 にエラーがあります。 名前空間 'http://schemas.datacontract.org/2004/07/estat02' の要素 'GET_STATS_LIST' を指定してください。。名前が 'GET_STATS_LIST'、名前空間が '' の 'Element' が検出されました。
HResult=-2146233076
IsTransient=false
Message=1 行目の位置 160 にエラーがあります。 名前空間 'http://schemas.datacontract.org/2004/07/estat02' の要素 'GET_STATS_LIST' を指定してください。。名前が 'GET_STATS_LIST'、名前空間が '' の 'Element' が検出されました。
Source=System.Runtime.Serialization
(以下省略)
名前空間が違うらしいのだけど、XMLの扱いなれていない人にはちんぷんかんぷん。
APIから受け取るXMLはこんな感じ。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<GET_STATS_LIST xsi:noNamespaceSchemaLocation="http://api.e-stat.go.jp/rest/1.0/schema/GetStatsList.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RESULT>
<STATUS>0</STATUS>
<ERROR_MSG>正常に終了しました。</ERROR_MSG>
<DATE>2014-11-01T23:48:09.333+09:00</DATE>
</RESULT>
<PARAMETER>
このXMLから作ったクラスはこんな感じ。
/// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
public partial class GET_STATS_LIST
{
private GET_STATS_LISTRESULT rESULTField;
private GET_STATS_LISTPARAMETER pARAMETERField;
Namespaceが空文字列になっているなあ。このあたりが原因か?
コメント
コメントを投稿