我正在开发一种最终以JSON格式返回数据提取的API。这不是我的确切代码。我已经简化了这个想法,所以我可以更清楚地传达我的问题。
有一种查询数据库并返回以下列的方法: CustomerID,CustomerName,Preference,PreferenceValue(一个客户将拥有数十个首选项)。数据集按CustomerID排序。
我的目标是返回一个像这样的JSON对象:
{
"Customer": {
"CustomerID": "123",
"CustomerName": "John Smith",
"CustomerPreferences": {
"Color": "Red",
"Texture": "Rough",
"Size": "Medium",
"Weight": "Heavy"
}
}
}
我是C#和OO的新手。所以,为了这些目的,我一整天都在研究和尝试各种方法。我可以用单个对象做这个没问题,但不能用嵌套类做。我的直觉告诉我,我试图做的事情应该变得更难......但它仍然无法实现。
我试过了(它没有用)。我做了这个课(注意:它与我希望获得的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返回就是一个快照。但我无法弄清楚如何创建这个简单的数据结构!
答案 0 :(得分:2)
你不是那么遥远。我会选择这样的东西
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>();
}
}
和
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());
}
}
但是尽量不像我那样屠宰格式......
答案 1 :(得分:1)
在我看来,你的JSON结构与你的类结构并不完全匹配。请考虑使用字典将首选项名称与其值匹配,而不是嵌套类。
const getLocalDay = (date) => {
const dayIndex = date.getDay();
const daysInWeek = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
return daysInWeek[dayIndex];
}
然后,您可以使用常用的添加方法为字典添加首选项。
答案 2 :(得分:0)
将偏好设置移到Customer类之外,改为定义属性:
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; }
}