我想从php网站反序列化一个Json字符串。不幸的是,每当我尝试它时,它将为medianPrice返回null ....为什么?
In [5]: import theano.tensor.signal.conv
In [6]: theano.tensor.signal
Out[6]: <module 'theano.tensor.signal' from '/usr/local/lib/python2.7/site-packages/theano/tensor/signal/__init__.pyc'>
In [7]: theano.tensor.signal.conv
Out[7]: <module 'theano.tensor.signal.conv' from '/usr/local/lib/python2.7/site-packages/theano/tensor/signal/conv.pyc'>
从网站返回的Json如下:
public class PriceInfo
{
public string success { get; set; }
public double lowestPrice { get; set; }
public string volume { get; set; }
public string medianPrice { get; set; }
}
WebClient client = new WebClient();
string url = "http://steamcommunity.com/market/priceoverview/?country=US¤cy=1&appid=730&market_hash_name=" + name;
byte[] html = client.DownloadData(url);
UTF8Encoding utf = new UTF8Encoding();
string return_value = utf.GetString(html);
PriceInfo priceInfo = new JavaScriptSerializer().Deserialize<PriceInfo>(return_value);
if( Double.Parse(priceInfo.medianPrice) > 0.15 )
{
string blablu = "hello";
}
我希望你能帮助我!
答案 0 :(得分:0)
我强烈建议您尝试使用Newtonsoft.Json
你会发现处理你的Jason对象更容易
您的代码将是这样的(未经测试)
PriceInfo defaultCallResult = JsonConvert.DeserializeObject<PriceInfo>(return_value);
答案 1 :(得分:0)
您的JSON属性名为&#34; median_price&#34; (使用下划线),但您的C#属性是&#34; medianPrice&#34;。
您可以使用Json.NET,这样您就可以使用属性更改映射。
使用Json.NET,按如下方式装饰你的medianPrice属性:
[JsonProperty(PropertyName = "median_price")]
public string medianPrice { get; set; }
答案 2 :(得分:0)
我不确定JavaScriptSerializer
如何成功解析你的类,因为键几乎不匹配类属性。
JavaScriperSerializer
is obsolete,我建议您使用其他序列化程序,例如Json.NET:
public class PriceInfo
{
[JsonProperty("success")]
public string Success { get; set; }
[JsonProperty("lowest_price")]
public double LowestPrice { get; set; }
[JsonProperty("volume")]
public string Volume { get; set; }
[JsonProperty("median_price")]
public string MedianPrice { get; set; }
}
当你想要反序列化时:
PriceInfo priceInfo = JsonConvert.DeserializeObject<PriceInfo>(returnValue);
答案 3 :(得分:0)
首先,如其他答案中所述,您的属性名称不匹配。
所以拿
public class PriceInfo
{
public string success { get; set; }
public string lowest_price { get; set; }
public string volume { get; set; }
public string median_price { get; set; }
}
编辑:如Yuval所述,您不能将JsonProperty与JavaScriptSerializer一起使用,因此您需要坚持使用json中的属性名称。
然后,json中有货币信息。所以你需要摆脱这些:
string return_value = "{\"success\":true,\"lowest_price\":\"$0.04\",\"volume\":\"3,952\",\"median_price\":\"$0.02\"}";
string return_valueconverted = HttpUtility.HtmlDecode(return_value);
PriceInfo priceInfo = new JavaScriptSerializer().Deserialize<PriceInfo>(return_valueconverted);
priceInfo.lowest_price = priceInfo.lowest_price.TrimStart('$');
priceInfo.median_price = priceInfo.median_price.TrimStart('$');
正如您所看到的,这会对这些值进行HtmlDecode,然后从该值中修剪美元符号。
在此处查看有关Html字符集的更多信息: http://www.w3.org/MarkUp/html-spec/html-spec_13.html