1

我正在将 JSON 字符串解析为 ObservableCollection,但是当我这样做时,Json.net 会抛出此错误:

Newtonsoft.Json.JsonSerializationException:无法将当前 JSON 数组(例如 [1,2,3])反序列化为类型“MVPTracker.ViewModels.DataModels+League+Position”,因为该类型需要 JSON 对象(例如 {"name":" value"}) 以正确反序列化。要修复此错误,请将 JSON 更改为 JSON 对象(例如 {"name":"value"})或将反序列化类型更改为数组或实现集合接口的类型(例如 ICollection、IList),例如可以从 JSON 数组反序列化。JsonArrayAttribute 也可以添加到类型中以强制它从 JSON 数组反序列化。

我的数据模型、视图模型和加载如下:

数据模型:

public class League
    {
        public string name { get; set; }
        public string code { get; set; }
        public string imageUrl { get; set; }
        public Position positions = new Position();

        public class Position
        {
            public string name { get; set; }
            public string code { get; set; }
            public string imageUrl { get; set; }
            public string[] statistics { get; set; }
        }
    }

加载/视图模型:

private ObservableCollection<DataModels.League> _leagues = new ObservableCollection<DataModels.League>();
    public ObservableCollection<DataModels.League> Leagues
    {
        get { return _leagues; }
        set { _leagues = value; NotifyPropertyChanged("Leagues"); }
    }

    public async void Load()
    {
        string leaguesJSON = await ServerConnector.LoadOrganizations();

        Leagues.Clear();
        Leagues = JsonConvert.DeserializeObject<ObservableCollection<DataModels.League>>(leaguesJSON);
    }

我尝试将 ObservableCollection 设置为 IList/ICollection 无济于事。

编辑:这是我正在解析的 json:http: //pastebin.com/QVnikitV

4

1 回答 1

2

positions在 C# 代码中的字段表示类型的单个对象Position。您的 JSON 对象的positions字段代表一个数组。

因此,您的 C# 代码需要更改为数组以匹配:

public Position[] positions { get; set; }
于 2012-12-18T00:14:39.810 回答