2017-02-06 3 views
1

Ich wurde mit einem problematischen (zumindest für mich) Job für mein Praktikum zugewiesen. Das Projekt hat ein C# Objekt, das wie folgt aussieht:C# MVC: Erstellen einer Tabelle aus C# -Objekt mit einer dynamischen JsonString-Eigenschaft

public class Person 
{ 
    int Id { get; set; } 
    string Name { get; set; } 
    string OtherInfo { get; set; } //json string for a dynamic info 
} 

So in der Datenbank, die Klasse Tabelle tblPersons sieht wie folgt aus: So

Id  Name   OtherInfo 
1  John Doe  {"Gender":"Male","City":"New York"} 
2  James Bradley {"Gender":"Male","City":"Los Angeles"} 

, wenn ich sage ‚dynamische Info‘ Ich meinte, dass die Die Eigenschaften der JSON-Zeichenfolge in der Spalte "AndereInfo" können sich ändern. Diese Eigenschaft wird in einer anderen Tabelle, um die Aufgabe

Id   Name    Type 
1   Gender    Text 
2   City    Text 

Now ‚tblOtherInfoDetails‘ genannt definiert, ich habe eine Person-Liste Tabelle, die die anderen Informationen als Spalte in der Tabelle erstellen enthält. Wie so; (SOLL HTML TABLE OUTPUT)

Id   Name    Gender   City 
1   John Doe   Male    New York 
2   James Bradley  Male    Los Angeles 

Aber ich bin verwirrt, wie dies zu tun/anzuzeigen. durch Deserialisieren die JSON-String und das Hinzufügen des Namens angezeigt werden in der Ansicht

public class PersonsList 
{ 
    string Name.. 
    string Gender.. 
    string City... 
} 

und füllen sie mit Daten, aber das Problem ist, wenn die Otherinfo Details geändert wird, wird das Programm nicht funktioniert: kann ich eine andere Klasse wie erstellen nicht mehr. Ich brauche eine Möglichkeit, um dynamisch eine dynamische Klasse zu erstellen, die mit verschiedenen Eigenschaften gefüllt und auf dem Bildschirm angezeigt werden kann. Aber ich bin verwirrt, wie das geht oder ob das möglich ist, da ich gerade neu in C# bin. Jede Hilfe oder Vorschlag wird sehr geschätzt.

+0

Wie über die Verwendung von Schlüsselwertpaar Wörterbuch? Was willst du machen, indem du eine neue Klasse für diesen JSON erstellst? –

+1

@KaushikThanki Können Sie mir ein einfaches Beispiel zeigen, wie ich das Wörterbuch mit den von mir erwähnten Anforderungen verwenden kann? –

+1

@KaushikThanki Ich muss nur eine Liste erstellen, die ich in eine HTML-Tabelle durchlaufen kann, die natürlich die Felder in der Hauptklasse und die JSON-Eigenschaften enthält. –

Antwort

0

Nun, ich bin mir nicht sicher, aber möglicherweise können Sie ein neues Modell erstellen, das eine Liste der Schlüsselwertpaare enthält. Und dann können Sie tblOtherInfoDetails für die Schlüssel durchsuchen und nach Werten aus dem deserialisierten Objekt suchen, die ihren Schlüsseln entsprechen. Fügen Sie dann den Schlüsselwert in Ihr neu erstelltes Objekt ein. Anfügen eines Codeschnipsel.

Hier ist Ihre neue Modellklasse

public class MyPerson 
    { 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public Dictionary<string, string> KeyVal { get; set; } 
    } 

Dann ist das, was Sie versuchen, oder etwas ähnliches wahrscheinlich

public ActionResult Test() 
    { 
     MyPerson mp= new MyPerson(); 

     var myTestObj = db.Persons.Find(1);// Say for test you are picking the person obj where the primary key is 1. 
     var testOtherInfo = db.tblOtherInfoDetailss.ToList(); 
     Dictionary<string, string> values = JsonConvert.DeserializeObject<Dictionary<string, string>>(myTestObj.OtherInfo); 
     mp.Name = myTestObj.Name; 
     mp.KeyVal = new Dictionary<string, string>(); 
     foreach (var i in testOtherInfo) 
     { 

      var value = values.Where(a => a.Key == i.Name).First().Value; 

      mp.KeyVal.Add(i.Name, value); 

     } 
     return View(mp); 
    } 
Verwandte Themen