4

Mt Gox の Http API に対してティッカーを作成しようとしています。次のような JSON が返されます。

{
"result":"success",
"return":
 {
 "high": {"value":"5.70653","value_int":"570653","display":"$5.70653","currency":"USD"},
 "low": {"value":"5.4145","value_int":"541450","display":"$5.41450","currency":"USD"},
 "avg": {"value":"5.561119626","value_int":"556112","display":"$5.56112","currency":"USD"},
 "vwap": {"value":"5.610480461","value_int":"561048","display":"$5.61048","currency":"USD"},
 "vol": {"value":"55829.58960346","value_int":"5582958960346","display":"55,829.58960346\u00a0BTC","currency":"BTC"},
 "last_all":{"value":"5.5594","value_int":"555940","display":"$5.55940","currency":"USD"},
 "last_local":{"value":"5.5594","value_int":"555940","display":"$5.55940","currency":"USD"},
 "last_orig":{"value":"5.5594","value_int":"555940","display":"$5.55940","currency":"USD"},
 "last":{"value":"5.5594","value_int":"555940","display":"$5.55940","currency":"USD"},
 "buy":{"value":"5.53587","value_int":"553587","display":"$5.53587","currency":"USD"},
 "sell":{"value":"5.56031","value_int":"556031","display":"$5.56031","currency":"USD"}
 }
}

その情報をオブジェクトにキャストしようとしています。次のような一連のクラスを作成しました。

[DataContract]
class MtGoxResponse
{
    public string result { get; set; }
    [DataMember(Name="return")]
    public Resp Resp { get; set; }
}

[DataContract]
class Resp
{
    public HLA high { get; set; }
    public HLA low { get; set; }
    public HLA avg { get; set; }
    public HLA vwap { get; set; }
    public HLA vol { get; set; }
    public HLA last_all { get; set; }
    public HLA last_local { get; set; }
    public HLA last_orig { get; set; }
    public HLA last { get; set; }
    public HLA buy { get; set; }
    public HLA sell { get; set; }
}

[DataContract]
class HLA
{
    public double value { get; set; }
    public int value_int { get; set; }
    public string display { get; set; }
    public string currency { get; set; }
}

Result毎回うまくいきますが、Resp常にnullです。DataContract属性に何か欠けていますか?根本的な原因はオブジェクトの名前だと思いますが、確かにそれを回避する方法があります。

4

1 に答える 1

4

あなたの[DataMember]属性が機能していない理由が正確にはわかりません。私が読んだことから、シリアライザー[DataMember]の実装ごとに解釈が異なるように見えるため、バグである可能性があります。

ただし、次のように@記号 beforeを使用するだけで、使用する必要がなくなります。return

[DataContract]
class MtGoxResponse
{
    public string result { get; set; }
    public Resp @return { get; set; }
}

このプレフィックスは、MSDN のC# キーワードのページでやや受動的に言及されています。

于 2013-01-25T18:21:11.543 に答える