1

JSON 文字列を ObservableCollection に解析していますが、これを行うと Json.net が次のエラーをスローします。

Newtonsoft.Json.JsonSerializationException: 現在の JSON 配列 ([1,2,3] など) を型 'MVPTracker.ViewModels.DataModels+League+Position' に逆シリアル化できません。型には JSON オブジェクト ({"name":" など) が必要なためです。 value"}) を使用して、正しく逆シリアル化します。このエラーを修正するには、JSON を JSON オブジェクト (例: {"name":"value"}) に変更するか、逆シリアル化された型を配列または List のようなコレクション インターフェイス (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

4

1 に答える 1

2

C# コードのフィールドは、 typepositionsの単一のオブジェクトを表しますPosition。JSON オブジェクトのpositionsフィールドは配列を表します。

したがって、一致するように C# コードを配列に変更する必要があります。

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