Json Deserealization错误

时间:2017-06-19 12:15:59

标签: c# json uwp

我尝试反序列化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回复

JSON

我有这个错误

enter image description here

我如何处理它?<​​/ p>

更新

以下是我从json回复生成的clases

Classes

2 个答案:

答案 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以“{”开头,如果它是一个数组,它将以“[”

开头