2016-12-08 5 views
0

Ich arbeite an einer API, die letztlich einen Datenextrakt im JSON-Format zurückgibt. Dies ist nicht mein genauer Code. Ich habe die Idee vereinfacht, damit ich meine Frage besser vermitteln kann.Erstellen und Füllen eines Objekts mit komplexen Typen

Es gibt eine Methode, die die Datenbank abfragt und die folgenden Spalten zurückgibt: KundenID, Kundenname, Präferenz, PräferenzWert (wobei ein Kunde Dutzende von Präferenzen hat). Der Datensatz ist nach CustomerID geordnet.

Mein Ziel ist es, ein JSON-Objekt wie folgt zurück:

{ 
    "Customer": { 
    "CustomerID": "123", 
    "CustomerName": "John Smith", 
    "CustomerPreferences": { 
     "Color": "Red", 
     "Texture": "Rough", 
     "Size": "Medium", 
     "Weight": "Heavy" 
    } 
    } 
} 

ich zu C# und OO bin neu. Zu diesem Zweck habe ich den ganzen Tag verschiedene Ansätze erforscht und ausprobiert. Ich kann dies mit einem einzigen Objekt tun, kein Problem, aber nicht mit einer verschachtelten Klasse. Meine Intuition sagt mir, dass das, was ich versuche, nicht viel schwieriger sein sollte ... aber es entzieht sich mir weiterhin.

Ich habe das versucht (es hat nicht funktioniert). Ich habe diese Klasse (Anmerkung: es ist die gleiche Form wie die JSON Ich hoffe zu bekommen):

public class Customer 
{ 
    public string CustomerID { get; set; } 
    public string CustomerName { get; set; } 
    public class Preferences 
    { 
     public string Preference { get; set; } 
     public string PreferenceValue { get; set; } 
    } 
} 

Dann habe ich die Objekte erstellt (obwohl an dieser Stelle, ich bin schon sicher, dass ich auf der falsche Weg, da ich gezwungen, sie getrennt zu initialisieren):

List<Customer> lstCustomer = new List<Customer>(); 
List<Customer.Preference> lstPref = new List<Customer.Preference>(); 

Dann versuchte ich durch meine Abfrageergebnisse Looping ... (nicht sicher, warum ich das immer noch teilen bin, da ich weiß, es doesn‘ t arbeiten, und ich bin wahrscheinlich peinlich selbst!):

Ich habe das Gefühl, das ist relativ einfach. Ich habe gesucht und gesucht und kann keine Lösung finden. Sobald ich ein Objekt erstellt und ausgefüllt habe, wird es als JSON zurückgegeben. Aber ich kann nicht herausfinden, wie man diese einfache Datenstruktur erstellt!

Antwort

2

Sie sind nicht so weit weg. Ich würde gehen mit so etwas wie diese

public class Customer 
    { 
     public string CustomerID { get; set; } 
     public string CustomerName { get; set; } 
     public Dictionary<string, string> Preferences { get; set; } 
     public Customer() 
     { 
      Preferences = new Dictionary<string, string>(); 
     } 

    } 

und

List<Customer> customers = new List<Customer>(); 

      if (rdr.HasRows) 
      { 
       Customer CurrentCustomer = new Customer(); 
       while (rdr.Read()) 
       { 
        /* 
        Since the data is sorted by CustID, 
        I only add the parent class when it changes. 
        */ 
        if (CurrentCustomer.CustomerID != rdr["CustID"].ToString()) 
        { 
         CurrentCustomer = new Customer() 
         { 
          CustomerID = rdr["CustID"].ToString(), 
          CustomerName = rdr["CustomerName"].ToString() 
         }; 
         customers.Add(CurrentCustomer); 
        } 
        CurrentCustomer.Preferences.Add(rdr["PreferanceName"].ToString(), 
         rdr["PreferenceValue"].ToString()); 
       } 
      } 

aber nicht versuchen, die Formatierung zu schlachten wie ich ...

0

Verschieben Präferenzen außerhalb Ihres Customer-Klasse, und eine Eigenschaft definieren statt:

public class Customer 
{ 
    public string CustomerID { get; set; } 
    public string CustomerName { get; set; } 
    public List<Preference> Preferences { get; set;} 
} 

public class Preference 
{ 
    public string Preference { get; set; } 
    public string PreferenceValue { get; set; } 
} 
1

Es scheint mir Ihre JSON-Struktur und Ihre Klassenstruktur passen nicht wirklich. Verwenden Sie anstelle einer geschachtelten Klasse ein Wörterbuch, um einen Präferenznamen mit seinem Wert abzugleichen.

public class Customer 
{ 
    public string CustomerID { get; set; } 
    public string CustomerName { get; set; } 
    public Dictionary<string, string> Preferences { get; } 
} 

Dann können Sie Präferenzen zu Ihrem Wörterbuch mit der üblichen add-Methode hinzufügen.

Verwandte Themen