2017-11-09 1 views
-1

私はこの例を見ていたことがあります。https://www.newtonsoft.com/json/help/html/DeserializeObject.htm jsonデータからオブジェクトを作成し、対応するプロパティを取得しようとしています。jsonデータを正しくデシリアライズするにはどうすればよいですか?

、よく..私はこの

Newtonsoft.Json.JsonSerializationExceptionを言ってエラーを得た:json_deserializing 'タイプ に 現在のJSON配列を(例えば、[1,2,3])デシリアライズすることはできません'。型がJSON オブジェクト(たとえば、{"name": "value"})を正しく必要としないため、「OppedAccounts」が正しくデシリアライズされません。 エラーを修正するには、JSONオブジェクトをJSONオブジェクト(例:{"name": "value"}) に変更するか、またはデシリアライズされたタイプを配列または コレクションインターフェイス(ICollection、IListなど)を実装するタイプに変更します。 をJSON配列から逆シリアル化できるリスト。 JSON配列から強制的に非直列化するために、JsonArrayAttributeを型に追加した にすることもできます。パス ''、行1、位置1 '

私はjsonに新しいです&デシリアライズするので、ここで何が起こっているのか分かりません。 私の質問は、私はどのようにプロップの方法でjsonを非直列化するのですか? 私はリストやものについて何かを読んだが、私はドットを結ぶことができなかった。

[ 
    { 
    "uuid": "98e99e7a-df48-4b8b-adc9-e65c32410247", 
    "name": "UsernameOne", 
    "level": 4, 
    "bypassesPlayerLimit": false 
    }, 
    { 
    "uuid": "b87e1cbc-c67c-4026-a359-8652ad9de8b4", 
    "name": "UsernameTwo", 
    "level": 4, 
    "bypassesPlayerLimit": false 
    } 
] 

CSHARPコード

public partial class MainWindow : Window 
    { 
     public string line = null; 

     public MainWindow() 
     { 
      InitializeComponent(); 
      Deserialize(); 
     } 

     private void Button_Click(object sender, RoutedEventArgs e) 
     { 
      if(line != null) 
      { 
       OppedAccounts account = JsonConvert.DeserializeObject<OppedAccounts>(line); 
       Debug.Print(account.name); 
      } 
     } 

     private void Deserialize() 
     { 
      using (StreamReader sr = new StreamReader("ops.json")) 
      { 
       line = sr.ReadToEnd(); 
      } 
      tbjson.AppendText(line); 
     } 
    } 

とクラス

class OppedAccounts 
    { 
     public string uuid { get; set; } 
     public string name { get; set; } 
     public int level { get; set; } 
     public bool bypassplayerlimit { get; set; } 
    } 
+2

'リストアカウント= JsonConvert.DeserializeObject <リスト>(ライン); [?C#の動的オブジェクトにデシリアライズJSON]の' –

+0

可能な重複(https://stackoverflow.com/questions/3142495/deserialize-json-into-c-sharp-dynamic-object) – xxbbcc

答えて

5

あなたは、配列をデシリアライズしているので、あなたが返されるオブジェクトの配列を期待しています。 accountのタイプとJsonConvert.DeserializeObjectの汎用パラメーターをList<OppedAccounts>に変更します。

List<OppedAccounts> accounts = JsonConvert.DeserializeObject<List<OppedAccounts>>(line); 
関連する問題