我正在研究一种最终将以JSON格式返回数据提取的API。这不是我确切的代码。我简化了这个想法,以便我可以更清楚地表达我的问题。创建并填充复杂类型的对象
有一种查询数据库并返回以下列的方法: CustomerID,CustomerName,Preference,PreferenceValue(其中一个客户将有几十个首选项)。数据集按CustomerID排序。
我的目标是返回一个JSON对象是这样的:
{
"Customer": {
"CustomerID": "123",
"CustomerName": "John Smith",
"CustomerPreferences": {
"Color": "Red",
"Texture": "Rough",
"Size": "Medium",
"Weight": "Heavy"
}
}
}
我是新的C#和面向对象。所以,为了达到这些目的,我一直在研究和尝试各种方法。我可以用单个对象做到这一点没有问题,但不能用嵌套类。我的直觉告诉我,我想要做的事情不应该更难......但它仍然在逃避我。
我试过了(它没有工作)。我做了这个类(注:这是相同的形状,我希望能得到JSON):
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; }
}
}
然后,我创建的对象(虽然在这一点上,我已经确信我在在错误的道路,因为我不得不单独对它们进行初始化):
List<Customer> lstCustomer = new List<Customer>();
List<Customer.Preference> lstPref = new List<Customer.Preference>();
然后我试图通过我的查询结果循环......(不知道为什么我还在分享这一点,因为我知道它不”我可能会很尴尬!!):
if (rdr.HasRows)
{
string CurrentCustomer = "";
while (rdr.Read())
{
/*
Since the data is sorted by CustID,
I only add the parent class when it changes.
*/
if (CurrentCustomer != rdr["CustID"].ToString())
{
lstCustomer.Add(new Customer
{
CustomerID = rdr["CustID"].ToString(),
CustomerName = rdr["CustomerName"].ToString()
});
CurrentCustomer = rdr["CustID"].ToString();
}
lstPref.Add(new Customer.Preference
{
PrefName = rdr["PreferanceName"].ToString(),
PrefValue = rdr["PreferenceValue"].ToString()
});
}
}
我有这种感觉比较容易。我一直在搜索和搜索,并找不到解决方案。一旦我创建并填充了一个对象,将它作为JSON返回是很简单的。但我无法弄清楚如何创建这个简单的数据结构!