【问题标题】:Json.net deserialize errorJson.net反序列化错误
【发布时间】:2012-12-18 08:14:39
【问题描述】:

我正在将 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 数组中反序列化。

我的 DataModel、ViewModel 和 Loading 如下:

数据模型:

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; }
        }
    }

正在加载/ViewModel:

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

【问题讨论】:

    标签: c# .net


    【解决方案1】:

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

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

    public Position[] positions { get; set; }
    

    【讨论】:

    • 而且效果很好。非常感谢,不敢相信我忽略了这么小的东西。
    • 没问题 - 有时只需要第二双眼睛。
    猜你喜欢
    • 2015-02-16
    • 2011-12-09
    • 1970-01-01
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多