名前空間 '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が空文字列になっているなあ。このあたりが原因か?

コメント

このブログの人気の投稿

varchar をデータ型 numeric に変換中に、算術オーバーフロー エラーが発生しました。