2016-09-09 3 views
2

Ich kann keinen Weg finden, mit JSON.NET eine Liste abgeleiteter Listen zu serialisieren, und ich beginne mich zu fragen, ob es überhaupt möglich ist. Lassen Sie mich die Situation mit einem Code erklären.Serialize eine Liste der abgeleiteten Liste

Ich habe eine neue Klasse geschaffen, die aus einer Liste eines bestimmten Objekts abgeleitet wird (zunächst versucht, durch einen generischen) und fügte eine String-Eigenschaft NomGroupe:

public class GroupeActes : List<Acte> 
{ 
    public string NomGroupe { get; set; } 

    public GroupeActes(string nom, List<Acte> liste) 
    { 
     NomGroupe = nom; 

     foreach (var acte in liste) 
     { 
      this.Add(acte); 
     } 
    } 
} 

Dann in meinem Code, ich habe eine Liste dieser Klasse deklariert (List<GroupeActes> listOfGroupeActes) und ich fülle sie mit Daten. Für die Serialisierung, verwende ich diesen Code:

 JsonSerializer serializer = new JsonSerializer(); 
     serializer.TypeNameHandling = TypeNameHandling.All; 
     using (StreamWriter sw = new StreamWriter(@"listOfGroupeActes.json")) 
     using (JsonWriter writer = new JsonTextWriter(sw)) 
     { 
      serializer.Serialize(writer, listOfGroupeActes); 
     } 

I mit und ohne TypeNameHandling.All Parameter und mit mehrere Kombination von Json.net Eigenschaften und sogar mit Datacontract/Datamember ausprobiert habe.

Bisher gelang es mir nur in meine JSON-Datei entweder die Daten jedes verschachtelten List<Acte> ohne die NomGroupe Eigenschaft, oder umgekehrt. Aber nicht beides, was ich gerne hätte.

Zwei Fragen dann:

  • Ist es überhaupt möglich?
  • Wenn ja, wie kann ich es tun?

Vielen Dank für Ihre Hilfe!

+0

Können Sie JsonConvert.SerializeObject() nicht verwenden? – gmn

+0

Nein, das Problem ist das selbe. Die Eigenschaft 'NomGroupe' wird dann ignoriert. – LaPointe

+0

Sieht aus wie ein Duplikat von [JSON serialize-Eigenschaften in der Klassenerbenliste] (https://Stackoverflow.com/questions/35439335) und/oder [Wie bekomme ich json.net, um Mitglieder einer Klasse zu serialisieren, die von der Liste abgeleitet ist? ] (https://stackoverflow.com/questions/21265629), die beide Problemumgehungen haben. – dbc

Antwort

1

You don't want to inherit from List<T> zu verwenden.

eine Liste erstellen Objekt statt:

public class GroupeActes 
{ 
    public List<Acte> Actes { get; set; } 

    public string NomGroupe { get; set; } 

    public GroupeActes(string nom, List<Acte> liste) 
    { 
     NomGroupe = nom; 

     Actes.AddRange(acte);   
    } 
} 

Listen (und andere Sammlungstypen) eine besondere Behandlung erhalten, während der Serialisierung. Sie möchten die öffentlichen Eigenschaften des Auflistungstyps (wie Capacity und Count) nicht in Ihrer Ausgabe, so dass die Eigenschaft, die Sie durch Vererbung hinzugefügt haben, auch nicht serialisiert wird.

ist eine Sammlung wie diese serialisiert:

if o is IEnumerable 
    foreach object s in o 
     serialize o 

So der Serializer nicht einmal auf Ihre enumerable Eigenschaften aussehen wird.

+0

Leider muss ich von einer Liste zur Gruppierung in eine Listview in einem Xamarin.Forms-Projekt [link] erben (https://developer.xamarin.com/guides/xamarin-forms/user-interface/listview/customizing-list) -Aussehen/). Willst du damit sagen, dass das Serialisieren eines Objekts mit JSON.NET gar nicht möglich ist? – LaPointe

+0

Hat Ihre Serialisierung etwas mit der Anzeige auf der Liste zu tun? Wenn nicht, verwenden Sie die obige Klasse für die Serialisierung und ordnen Sie sie der aus Ihrer Frage zur Anzeige zu. – CodeCaster

+0

Ich beabsichtige, die Serialisierung nur zum Speichern der Daten zu verwenden. Also, wenn JSON.NET dies nicht kann, ist dies die Lösung, die ich verwenden würde. Danke, ich werde deine Antwort akzeptieren. – LaPointe

0

Versuchen Newtonsoft Json.NET

string itemToSend = JsonConvert.SerializeObject(dataModel); 
+0

Nein, das Problem ist das selbe leider. Die Eigenschaft 'NomGroupe' wird dann ignoriert. – LaPointe

Verwandte Themen