我的实习工作被分配了一个问题(至少对我而言)。该项目有一个C#对象,如下所示:
public class Person
{
int Id { get; set; }
string Name { get; set; }
string OtherInfo { get; set; } //json string for a dynamic info
}
所以在数据库中,'table tblPersons
类看起来像这样:
Id Name OtherInfo
1 John Doe {"Gender":"Male","City":"New York"}
2 James Bradley {"Gender":"Male","City":"Los Angeles"}
所以当我说“动态信息”时,我的意思是otherinfo列中json字符串的属性可能会改变。此属性在另一个名为“tblOtherInfoDetails”
的表中定义Id Name Type
1 Gender Text
2 City Text
现在,我必须创建一个Persons列表,其中包含表中列的其他信息。像这样; (希望的HTML表格输出)
Id Name Gender City
1 John Doe Male New York
2 James Bradley Male Los Angeles
但我很困惑如何做/显示这个。 我可以创建另一个类,如:
public class PersonsList
{
string Name..
string Gender..
string City...
}
通过反序列化json字符串并在视图中添加要显示的名称来填充数据,但问题是当OtherInfo详细信息发生更改时,程序将不再起作用。我需要一些方法来动态创建动态类,可以由不同的属性填充并显示在屏幕上。但我很困惑如何做到这一点,或者如果可能,因为我只是新的C#。任何帮助或建议将受到高度赞赏..
答案 0 :(得分:0)
嗯,我不确定,但可能你可以创建一个包含键值对列表的新模型。然后,您可以在tblOtherInfoDetails中搜索键,并从与其键匹配的反序列化对象中搜索值。然后在新制作的对象中插入键值。附上一段代码。
这是您的新模型类
public class MyPerson
{
public int Id { get; set; }
public string Name { get; set; }
public Dictionary<string, string> KeyVal { get; set; }
}
然后这就是你可能尝试或类似的东西
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);
}