我正在努力将如何将以下价格报价JSON数据转换为C# 对象:
{"MyFeed":
{"@Provider":"SomeProvider","MMM":
{"@name":"3M Corp","low":"194.80","high":"136.78","change":"2.80","pctchange":"0.22","ask":"135.15","bid_time":"20161104131845","bid":"134.80"}
}}
我创建了一个C#类:
public class Quote
{
public string Provider { get; set; }
public Data Info { get; set; }
}
public class Data
{
public string name { get; set; }
public decimal low { get; set; }
public decimal high { get; set; }
public decimal change { get; set; }
public decimal pctchange { get; set; }
public decimal ask { get; set; }
public DateTime bid_time { get; set; }
public decimal bid { get; set; }
}
然后,在代码中,我使用HttpWebRequest
获取数据,运行得很好。但是反序列化JSON数据的步骤并不起作用。它不会抛出错误,它只是没有数据。该代码是:
var request = HttpWebRequest.Create(new Uri("<request URL here>")) as HttpWebRequest;
request.Method = "POST";
var response = request.GetResponse();
using (Stream stream = response.GetResponseStream())
{
using (var reader = new StreamReader(stream))
{
Quote quote = JsonConvert.DeserializeObject<Quote>(reader.ReadToEnd());
lblPrice.Text = string.Format("{0:c}", quote.Data.ask);
}
}
我逐步完成了代码,因此我知道Web请求正在运行并返回一个JSON字符串。我只是不知道如何构造C#类来接受反序列化的数据。帮助将不胜感激!
答案 0 :(得分:3)
您应该定义这样的属性。
[JsonProperty(PropertyName = "@Provider")]
public string Provider { get; set; }
和
[JsonProperty(PropertyName = "@name")]
public string name { get; set; }
你还有其他几十个问题,比如你的字段在json中不是十进制,错误的类结构。这是你的课程应该如何:
public class MyFeed
{
[JsonProperty(PropertyName = "@Provider")]
public string Provider { get; set; }
public MMM MMM { get; set; }
}
public class RootJsonObject
{
public MyFeed MyFeed { get; set; }
}
public class MMM
{
[JsonProperty(PropertyName = "@name")]
public string name { get; set; }
public string provider { get; set; }
public string low { get; set; }
public string high { get; set; }
public string change { get; set; }
public string pctchange { get; set; }
public string ask { get; set; }
public string bid_time { get; set; }
public string bid { get; set; }
}
如何进行转换:
RootJsonObject quote = JsonConvert.DeserializeObject<RootJsonObject>(json);
答案 1 :(得分:2)
您是否尝试过使用此json2csharp
答案 2 :(得分:1)
handle
指定序列化字符串中的名称。JsonProperty
类型的序列化方式。这是一个完整且有效的解决方案,与你的json。
DateTime
答案 3 :(得分:0)
你的Quote类应该是Serializable。使用DataMembers为其添加Serializable属性或向其添加DataContract属性。