我尝试反序列化json并写入List
这是我的ViewModel代码
public async void Posts_download()
{
string url = "https://www.reddit.com/top/.json?count=50";
var json = await FetchAsync(url);
var json_new = json.ToString();
List<RootObject> rootObjectData = JsonConvert.DeserializeObject<List<RootObject>>(json);
PostsList = new List<RootObject>(rootObjectData);
}
private async Task<string> FetchAsync(string url)
{
string jsonString;
using (var httpClient = new System.Net.Http.HttpClient())
{
var stream = await httpClient.GetStreamAsync(url);
StreamReader reader = new StreamReader(stream);
jsonString = reader.ReadToEnd();
}
return jsonString;
}
这是json回复
我有这个错误
我如何处理它?</ p>
更新
以下是我从json回复生成的clases
答案 0 :(得分:1)
JSON没有返回数组。 <bean class="org.apache.ignite.configuration.CacheConfiguration">
...
<property name="queryEntities">
<list>
<bean class="org.apache.ignite.cache.QueryEntity">
<property name="keyType" value="java.lang.String"/>
<property name="valueType" value="java.lang.Integer"/>
</bean>
</list>
</property>
...
</bean>
应如下所示:
RootObject
然后在没有public class RootObject
{
public string kind { get; set; }
public Data data { get; set; }
}
的情况下调用它:
List<>
在RootObject rootObjectData = JsonConvert.DeserializeObject<RootObject>(json);
中有一个data
。我猜你正在寻找那个。请参阅Easiest way to parse JSON response以了解如何创建C#对象。
答案 1 :(得分:1)
你发布的json不是一个数组,它是一个json对象,但你要求jsonconvert反序列化为一个数组。更改RootObject类并将其他类添加到:
class RootObject
{
string kind {get;set}
Data data {get;set;}
List<Child> {get;set;}
}
class Data
{
string modhash {get;set;}
string before {get;set;}
string after {get;set;}
}
class Child
{
string kind {get;set;}
data .. and so on.
}
然后你将你的jsonconver行更改为:
RootObject rootObjectData = JsonConvert.DeserializeObject<RootObject>(json);
请注意,这不是一个完全有效的示例,因为完全定义Child类会很麻烦,因为有许多属性。
需要这个的原因是因为发布的json是一个持有数组的json对象。你可以告诉,因为json以“{”开头,如果它是一个数组,它将以“[”
开头