Edw*_*ate 0 c# twitter visual-studio-2005 json.net deserialization
好的,我会在这里尝试对我的问题非常具体.经过一些研究后,我终于使我的代码工作了(有点,因为它没有返回所需的结果).我目前正在使用JSON.net并尝试反序列化以下Json字符串,这是对twitter API的响应.
[{"created_at":"2012-09-03T18:22:54Z","locations":[{"name":"Globales","woeid":1}],"trends":[{"query":"%2327CosasSobreMi","name":"#27CosasSobreMi","promoted_content":null,"url":"http:\/\/twitter.com\/search\/?q=%2327CosasSobreMi","events":null},{"query":"%23AskTravis","name":"#AskTravis","promoted_content":null,"url":"http:\/\/twitter.com\/search\/?q=%23AskTravis","events":null},{"query":"%23WhyDoPeopleThinkItsOkayTo","name":"#WhyDoPeopleThinkItsOkayTo","promoted_content":null,"url":"http:\/\/twitter.com\/search\/?q=%23WhyDoPeopleThinkItsOkayTo","events":null},{"query":"%22We%20%3C3%20Justin%22","name":"We \u003C3 Justin","promoted_content":null,"url":"http:\/\/twitter.com\/search\/?q=%22We%20%3C3%20Justin%22","events":null},{"query":"%22We%20Adore%20One%20Direction%22","name":"We Adore One Direction","promoted_content":null,"url":"http:\/\/twitter.com\/search\/?q=%22We%20Adore%20One%20Direction%22","events":null},{"query":"%22Stefan%20Is%20Elena's%20Humanity%22","name":"Stefan Is Elena's Humanity","promoted_content":null,"url":"http:\/\/twitter.com\/search\/?q=%22Stefan%20Is%20Elena's%20Humanity%22","events":null},{"query":"%22Eric%20Saade%20Come%20Back%20To%20Poland%22","name":"Eric Saade Come Back To Poland","promoted_content":null,"url":"http:\/\/twitter.com\/search\/?q=%22Eric%20Saade%20Come%20Back%20To%20Poland%22","events":null},{"query":"Hlavackova","name":"Hlavackova","promoted_content":null,"url":"http:\/\/twitter.com\/search\/?q=Hlavackova","events":null},{"query":"%22Serena%20Williams%22","name":"Serena Williams","promoted_content":null,"url":"http:\/\/twitter.com\/search\/?q=%22Serena%20Williams%22","events":null},{"query":"%22Kire%C3%A7burnu%20%C3%87akallar%C4%B1%22","name":"Kire\u00e7burnu \u00c7akallar\u0131","promoted_content":null,"url":"http:\/\/twitter.com\/search\/?q=%22Kire%C3%A7burnu%20%C3%87akallar%C4%B1%22","events":null}],"as_of":"2012-09-03T18:25:18Z"}]
Run Code Online (Sandbox Code Playgroud)
包含对象和东西的常规Json字符串...除了我不知道开头和结尾的第一个"[,]"是什么,一位朋友指出了这一点.现在我为Json字符串创建了一些类:
public class Location
{
private string _name;
private int _woeid;
public string name { get { return _name; } set { value = _name; } }
public int woeid { get { return _woeid; } set { value = _woeid; } }
}
public class Trend
{
private string _query, _name, _url;
private object _promoted_content, _events;
public string query { get { return _query; } set { value = _query; } }
public string name { get { return _name; } set { value = _name; } }
public object promoted_content { get { return _promoted_content; } set { value = _promoted_content; } }
public string url { get { return _url; } set { value = _url; } }
public object events { get { return _events; } set { value = _events; } }
}
public class RootObject
{
private List<Location> _locations;
private List<Trend> _trends;
private string created_at_, _as_of;
public List<Trend> trends { get { return _trends; } set { value = _trends; } }
public string created_at { get { return created_at_;} set { value = created_at_; } }
public string as_of { get { return _as_of ;} set { value = _as_of; } }
public List<Location> locations { get { return _locations; } set { value = _locations; }}
}
Run Code Online (Sandbox Code Playgroud)
而我用来实现它的方法是这样的:
WebClient client = new WebClient();
Stream stream = client.OpenRead(@"https://api.twitter.com/1/trends/1.json");
StreamReader reader = new StreamReader(stream);
string nvm = reader.ReadToEnd();
try
{
List<RootObject> content = JsonConvert.DeserializeObject<List<RootObject>>(JsonString);
}
catch (System.Exception message)
{
throw;
}
Run Code Online (Sandbox Code Playgroud)
我只是无法判断我的类是否错误,因为变量内容总是为空,我无法使用Visual Studio 2005将抽象定义更改为im.尝试更改类中的列表但无法使其工作.
我在StackOverflow中尝试了不同的方法以及所有不同的响应,但它们似乎都使用了一些对我不可用的方法,或者常规的反序列化对它们起作用.
您不需要任何这些类.只是用dynamic
WebClient client = new WebClient();
string json = client.DownloadString("https://api.twitter.com/1/trends/1.json");
dynamic dynObj = JsonConvert.DeserializeObject(json);
foreach (var item in dynObj)
{
foreach (var trend in item.trends)
{
Console.WriteLine("{0} - {1} - {2}",trend.query,trend.name,trend.url);
}
}
Run Code Online (Sandbox Code Playgroud)
编辑
另一个版本没有 dynamic
var dynObj = (JArray)JsonConvert.DeserializeObject(json);
foreach (var item in dynObj)
{
foreach (var trend in item["trends"])
{
Console.WriteLine("{0} - {1} - {2}",trend["query"],trend["name"],trend["url"]);
}
}
Run Code Online (Sandbox Code Playgroud)
EDIT2
JArray dynObj = (JArray)JsonConvert.DeserializeObject(json);
foreach (JObject item in dynObj)
{
foreach (JObject trend in item["trends"])
{
Console.WriteLine("{0} - {1} - {2}",trend["query"],trend["name"],trend["url"]);
}
}
Run Code Online (Sandbox Code Playgroud)
EDIT3
for (int i = 0; i < dynObj.Count;i++)
{
for (int j = 0; j < ((JArray) dynObj[i]["trends"]).Count;j++ )
{
JObject trend = (JObject)((JArray)dynObj[i]["trends"])[j];
Console.WriteLine("{0} - {1} - {2}", trend["query"], trend["name"], trend["url"]);
}
}
Run Code Online (Sandbox Code Playgroud)