2017-12-30 9 views
0

Ich möchte Liste von SyncEntity anzeigen, die eine andere Liste von EntityField in meiner Klasse enthält, aber ich habe nur "JSONReader.SyncEntity" als Ausgabe, Wie kann ich als Liste von ausgegeben werden SyncEntity. Unten ist mein Code-Snippet.JSON-Datei kann nicht in Klassenobjekt in C# konvertieren

namespace JSONReader 
{ 
public class SyncEntity 
{ 
    public string Name { get; set; } 
    public string Id { get; set; } 
    public string Modified { get; set; } 
    public List<EntityField> EntityFields { get; set; } 
} 
public class EntityField 
{ 
    public string Name { get; set; } 
    public string Type { get; set; } 
    public string Value { get; set; } 
} 
public class RootObject 
{ 
    public List<SyncEntity> SyncEntity { get; set; } 
} 
} 

Unten ist meine Hauptklasse:

class Program 
{ 
    static void Main() 
    { 
     ExecuteEmployeeSearch(); 
     Console.ReadLine(); 
    } 

    static void ExecuteEmployeeSearch() 
    { 
     List<SyncEntity> datalist = JsonConvert.DeserializeObject<List<SyncEntity>>(File.ReadAllText(@"E:\\JsonDemo.json")); 
     datalist.ForEach(Console.WriteLine); 
    } 
} 

Unten ist mein JSON-Format:

[{ 
"SyncEntity": [{ 
    "Name": "Vivek", 
    "Id": "24", 
    "Modified": "30-Dec-2017", 
    "EntityFields": [{ 
      "Name": "Absolute No", 
      "Type": "String", 
      "Value": "string" 
     }, 
     { 
      "Name": "Description", 
      "Type": "String", 
      "Value": "String" 
     } 
    ] 
}] 
}] 

Was ich Liste des SyncEntity in dieser Liste des Entity-Feldes bekommen verpaßt, Danke Erweitert

Antwort

0

Die Struktur Ihres JSON schlägt vor, dass Sie nach einer Liste von RootObject fragen müssen s beim Deserialisieren. Versuchen Sie, diese

var data = JsonConvert.DeserializeObject<List<RootObject>>(File.ReadAllText(@"E:\\JsonDemo.json")); 
data.ForEach(Console.WriteLine); 

Ich vermute, dass Sie auch die SyncEntity als Objekt definieren müssen, nicht als ein Array in Ihrem JSON Datei. Es macht mehr Sinn, wenn es so etwas wie dies im obigen Fall

[{ 
    "Name": "Vivek", 
    "Id": "24", 
    "Modified": "30-Dec-2017", 
    "EntityFields": [{ 
      "Name": "Absolute No", 
      "Type": "String", 
      "Value": "string" 
     }, 
     { 
      "Name": "Description", 
      "Type": "String", 
      "Value": "String" 
     } 
    ] 
}] 

sah, Ihre neue Modellklassen die folgende Struktur

public class EntityField 
{ 
    public string Name { get; set; } 
    public string Type { get; set; } 
    public string Value { get; set; } 
} 

public class SyncEntity 
{ 
    public string Name { get; set; } 
    public string Id { get; set; } 
    public string Modified { get; set; } 
    public List<EntityField> EntityFields { get; set; } 
} 

Danach können Sie jetzt deserialisieren in List<SyncEntity> haben sollte. Um Ihre Daten angezeigt werden, sollten Sie diese Liste durchlaufen und die entsprechenden Eigenschaften

var data = JsonConvert.DeserializeObject<List<SyncEntity>>(File.ReadAllText(@"E:\\JsonDemo.json")); 
data.ForEach(se => 
{ 
    Console.WriteLine("The sync entity name is " + se.Name + ". And it has the following fields:"); 
    se.EntityFields.ForEach(ef => 
    { 
     Console.WriteLine("{0} of type {1} with value {2}", ef.Name, ef.Type, ef.Value); 
    }); 
}); 

drucken ich hoffe, das hilft.

+0

Dank @Octavian für Ihre schnelle Antwort, aber es gab auch die alte Ausgabe wie "JSONReader.RootObject" –

+0

@MayurChaudhari Das passiert, weil Sie 'Console.WriteLine' mit dem Objekt als Argument aufrufen. Kannst du die JSON-Struktur ändern, oder musst du bei der aktuellen bleiben? –

+0

Welche Struktur meinst du .. Ich habe keine Ahnung von einer anderen Struktur. Ich bin neu bei Json und wenn ich bei der jetzigen Struktur bleiben möchte, was kann ich dafür tun und wenn ich die Struktur ändere, dann kann Meine Klasse geändert werden ??? –

Verwandte Themen