2016-05-27 20 views
1

この形式のjsonをオブジェクトのリストにデシリアライズしたいとします。 これは私のJSONは次のようになります。JSON配列をC#でリストに逆シリアル化する

[{ 
     id : 3, 
     vraag : "Op de keyserlei zijn er te weinig ...", 
     fase_id : "1", 
     antwoorden : [{ 
       id : 12, 
       antwoord : "Bomen", 
       inspraakvraag_id : "3", 
       aantal_gekozen : "452" 
      }, { 
       id : 13, 
       antwoord : "Vuilbakken", 
       inspraakvraag_id : "3", 
       aantal_gekozen : "777" 
      }, { 
       id : 14, 
       antwoord : "Fietsstallingen", 
       inspraakvraag_id : "3", 
       aantal_gekozen : "456" 
      } 
     ] 
    }, { 
     id : 5, 
     vraag : "Vind je dat er te veel geluidsoverlast in de binnenstad in het weekend", 
     fase_id : "1", 
     antwoorden : [{ 
       id : 18, 
       antwoord : "Ja", 
       inspraakvraag_id : "5", 
       aantal_gekozen : "741" 
      }, { 
       id : 19, 
       antwoord : "Nee", 
       inspraakvraag_id : "5", 
       aantal_gekozen : "147" 
      }, { 
       id : 20, 
       antwoord : "Geen mening", 
       inspraakvraag_id : "5", 
       aantal_gekozen : "987" 
      } 
     ] 
    }, { 
     id : 4, 
     vraag : "Welk van de volgende evenementen zou je graag zien op de groenplaats?", 
     fase_id : "1", 
     antwoorden : [{ 
       id : 15, 
       antwoord : "Tuinbouw Expo", 
       inspraakvraag_id : "4", 
       aantal_gekozen : "785" 
      }, { 
       id : 16, 
       antwoord : "Metal festival", 
       inspraakvraag_id : "4", 
       aantal_gekozen : "156" 
      }, { 
       id : 17, 
       antwoord : "Counter strike LAN party", 
       inspraakvraag_id : "4", 
       aantal_gekozen : "456" 
      } 
     ] 
    }, { 
     id : 2, 
     vraag : "In spark spoork noord zou ik graag ... zien", 
     fase_id : "1", 
     antwoorden : [{ 
       id : 6, 
       antwoord : "Een speeltuin", 
       inspraakvraag_id : "2", 
       aantal_gekozen : "245" 
      }, { 
       id : 7, 
       antwoord : "Een fabriek", 
       inspraakvraag_id : "2", 
       aantal_gekozen : "241" 
      }, { 
       id : 8, 
       antwoord : "Een bos", 
       inspraakvraag_id : "2", 
       aantal_gekozen : "300" 
      } 
     ] 
    }, { 
     id : 1, 
     vraag : "Voel je je 's avonds veilig in de stad Berchem?", 
     fase_id : "1", 
     antwoorden : [{ 
       id : 9, 
       antwoord : "Ja", 
       inspraakvraag_id : "1", 
       aantal_gekozen : "452" 
      }, { 
       id : 10, 
       antwoord : "Nee", 
       inspraakvraag_id : "1", 
       aantal_gekozen : "721" 
      }, { 
       id : 11, 
       antwoord : "Niet van toepassing.", 
       inspraakvraag_id : "1", 
       aantal_gekozen : "123" 
      } 
     ] 
    } 
] 

これが私のメインのコードは次のようになります。

var vraagTest = JsonUtility.FromJson<List<vraag>>(www.text); 

私のクラス:

[System.Serializable] 
public class vraag { 

    public int id; 
    public string vraagg; 
    public int fase_id; 
    public List<antwoorden> antwoorden; 

} 

[Serializable] 
public class antwoorden { 
    public int id; 
    public string antwoord; 
    public int inspraakvraag_id; 
    public int aantal_gekozen; 
} 

私は私のいくつかのソリューションを試してみました

ArgumentException: JSON must represent an object type. 

私はまた、別のクラスに最初のリストを入れて試してみたが、私は同じ問題を得る:

[Serializable] 
public class vragenlijst{ 
    public List<vragenlijst> vragen; 
} 

EDITを

私はnternetが、私は同じエラーを取得しておきます問題を修正しました!私はオブジェクトの周りにJSONをラップすることで修正しました.JsonUtilityはトップレベルのJSON逆シリアル化(Info []など)の配列型をサポートしていません。オブジェクトにJSONをラップする必要があります。

これは私の作業コードです:

{ 
vragen: [ 
{ 
id: 2, 
vraag: "In spark spoork noord zou ik graag ... zien", 
fase_id: "1", 
antwoorden: [ 
{ 
id: 6, 
antwoord: "Een speeltuin", 
inspraakvraag_id: "2", 
aantal_gekozen: "245" 
}, 
{ 
id: 7, 
antwoord: "Een fabriek", 
inspraakvraag_id: "2", 
aantal_gekozen: "241" 
}, 
{ 
id: 8, 
antwoord: "Een bos", 
inspraakvraag_id: "2", 
aantal_gekozen: "300" 
} 
] 
}, 
{ 
id: 1, 
vraag: "Voel je je 's avonds veilig in de stad Berchem?", 
fase_id: "1", 
antwoorden: [ 
{ 
id: 9, 
antwoord: "Ja", 
inspraakvraag_id: "1", 
aantal_gekozen: "452" 
}, 
{ 
id: 10, 
antwoord: "Nee", 
inspraakvraag_id: "1", 
aantal_gekozen: "721" 
}, 
{ 
id: 11, 
antwoord: "Niet van toepassing.", 
inspraakvraag_id: "1", 
aantal_gekozen: "123" 
} 
] 
}, 
{ 
id: 3, 
vraag: "Op de keyserlei zijn er te weinig ...", 
fase_id: "1", 
antwoorden: [ 
{ 
id: 12, 
antwoord: "Bomen", 
inspraakvraag_id: "3", 
aantal_gekozen: "452" 
}, 
{ 
id: 13, 
antwoord: "Vuilbakken", 
inspraakvraag_id: "3", 
aantal_gekozen: "777" 
}, 
{ 
id: 14, 
antwoord: "Fietsstallingen", 
inspraakvraag_id: "3", 
aantal_gekozen: "456" 
} 
] 
} 
] 
} 

メインコード:

var vraagTest = JsonUtility.FromJson<vragenlijst>(www.text); 

クラス:

[Serializable] 
public class vragenlijst{ 
    public List<Vraag> vragen; 
} 

[System.Serializable] 
public class Vraag { 

    public int id; 
    public string vraag; 
    public int fase_id; 
    public List<antwoorden> antwoorden; 

} 

[Serializable] 
public class antwoorden { 
    public int id; 
    public string antwoord; 
    public int inspraakvraag_id; 
    public int aantal_gekozen; 
} 

答えて

2
[System.Serializable] 
public class vraagClass 
{ 

    public int id; 
    public string vraag; 
    public int fase_id; 
    public List<antwoorden> antwoorden; 

} 
[Serializable] 
public class antwoorden 
{ 
    public int id; 
    public string antwoord; 
    public int inspraakvraag_id; 
    public int aantal_gekozen; 
} 

[Serializable] 
public class vragenlijst 
{ 
    public List<vraagClass> vragen; 
} 
class Program 
{ 
    static void Main(string[] args) 
    { 
     #region json 
     string jsonText = ""; 

     #endregion 

     using(StreamReader sr = new StreamReader(@"E:\WIP\DeserializeStackOverFlow\DeserializeStackOverFlow\Lib\abc.json")) 
     { 
      jsonText = sr.ReadToEnd(); 
     } 


     var vraagTest = JsonConvert.DeserializeObject<List<vraagClass>>(jsonText); 
    } 
} 

はわずか2つの物事を修正する:

  1. 「vraag」クラスプロパティ「vraag」を持っているので、クラスの名前を変更することはできません[問題なくJSON配列が命名されていないとして]
  2. Bartによって提案されたように、デシリアライザはリストである必要があります。ベースではありません "public List vragen;" `パブリッククラスvragenlijst { 公共一覧 vragen;:;` この `VAR vraagTest = JsonUtility.FromJson (www.text):私は今、これを持って
+0

JSONの周りに{}を追加することで修正しました.JsonUtilityは、トップレベルのJSON逆シリアル化(Info []など)の配列タイプをサポートしていないようですが、JSONをオブジェクトにラップする必要があります。手伝ってくれてありがとう! – Kamarov

+0

オブジェクトの周りにJSOn配列をラップする* – Kamarov

2

私はあなたがあなたのvragenlijst級でvraag代わりのvragenlijstのリストが必要になりますと仮定します。

[Serializable] 
public class vragenlijst{ 
    public List<vraag> vragen; 
} 

その後

var vraagTest = JsonUtility.FromJson<vragenlijst>(www.text); 

代わりの

var vraagTest = JsonUtility.FromJson<List<vraag>>(www.text); 
を使用 デシリアライズするタイプが vragenlijstであり、 List<vraag>でないため、

です。

+0

} ' しかし、私はまだ同じエラーが発生します – Kamarov

+0

もちろん、' vraag'のリストが必要です。 'vraagg'はうまくいけば誤字ですか?そうではありませんか? – HimBromBeere

+0

私はvraagという変数を既に持っていたので、これを使用しました。今は代わりに大文字のVを使いました。私はあなたが言ったことを正確に行いましたが、私はまだ同じエラーが発生します:/ – Kamarov

関連する問題