我能够获得一个列表,例如1 ID:12 History并将其放置在模型Customer中以进行映射并将其放置在customerList下以使其成为一个,但是当我对其进行序列化时...输出变为像这样。
如果客户ID相同,则历史记录应仅在一个父INI_CUSTOMER_ID中。
{
"INI_CUSTOMER_ID": "liebaj7337",
"History": [{
"DealerID": "1",
"VisitedStoreName": "1",
"VisitedDate": "1"
"Activity": "1",
"VehicleID": "1",
"VehicleName": "1",
"OCN": "",
"Source": "1"
}]
}, {
"INI_CUSTOMER_ID": "LieBaj7337",
"History": [{
"DealerID": "2",
"VisitedStoreName": "2",
"VisitedDate": "2",
"Activity": "2",
"VehicleID": "2",
"VehicleName": "2",
"OCN": "",
"Source": "2"
}]
请检查我的模型是否符合我的预期输出。
{
"INI_CUSTOMER_ID": "liebaj7337",
"History": [{
"DealerID": "1",
"VisitedStoreName": "1",
"VisitedDate": "1",
"Activity": "1",
"VehicleID": "1",
"VehicleName": "1",
"OCN": "",
"Source": "1"
},{
"DealerID": "2",
"VisitedStoreName": "2",
"VisitedDate": "2",
"Activity": "2",
"VehicleID": "2",
"VehicleName": "2",
"OCN": "",
"Source": "2"
}]
public class CustomerList
{
public List<Customer> Customers { get; set; }
}
public class Customer
{
public string INI_CUSTOMER_ID { get; set; }
public List<History> History { get; set; }
}
public class History
{
public string DealerID { get; set; }
public string VisitedStoreName { get; set; }
public string VisitedDate { get; set; }
public string Activity { get; set; }
public string VehicleID { get; set; }
public string VehicleName { get; set; }
public string OCN { get; set; }
public string Source { get; set; }
}
答案 0 :(得分:0)
您正在比较2个具有不同ID的字符串,因为liebaj7337与LieBaj7337不同,您必须小心区分大小写,可以执行以下操作:
if (oldID.Equals(row["CustomerID"].ToString(), StringComparison.InvariantCultureIgnoreCase))
另一个提示:如果您想检查字符串是否为空或null,请执行以下操作:
if (string.IsNullOrEmpty(oldID))
代替
if(oldID == "")
编辑:您实际上错放了将客户添加到客户列表的位置,因为只有在完全迭代循环之后才有意义添加
var jsonSerialiser = new JavaScriptSerializer();
string json = "";
DataTable dt = new DataTable();
dt = Common.GetData(txtDateFrom.Text, txtDateTo.Text);
DataView dv = new DataView(dt);
dv.Sort = "MobileNumber, Date";
string oldID = "";
List<History> history = new List<History>();
List<CustomerList> customerLists = new List<CustomerList>();
List<Customer> customer = new List<Customer>();
foreach (DataRowView row in dv)
{
if (string.IsNullOrEmpty(oldID))
{
history.Add(new History
{
DealerID = row["DealerID"].ToString(),
VisitedStoreName = row["DealerName"].ToString(),
VisitedDate = row["Date"].ToString(),
Activity = row["Activity"].ToString(),
VehicleID = row["VehicleID"].ToString(),
VehicleName = row["CarModel"].ToString(),
OCN = row["OCN"].ToString(),
Source = row["Source"].ToString()
});
oldID = row["CustomerID"].ToString();
}
else if (oldID.Equals(row["CustomerID"].ToString(), StringComparison.InvariantCultureIgnoreCase)) //compare old to new
{
history.Add(new History
{
DealerID = row["DealerID"].ToString(),
VisitedStoreName = row["DealerName"].ToString(),
VisitedDate = row["Date"].ToString(),
Activity = row["Activity"].ToString(),
VehicleID = row["VehicleID"].ToString(),
VehicleName = row["CarModel"].ToString(),
OCN = row["OCN"].ToString(),
Source = row["Source"].ToString()
});
}
else
{
//{
customer.Add(new Customer { INI_CUSTOMER_ID = oldID, History = history });
//};
//json += JsonConvert.SerializeObject(customerLists);
//clear the history list
history.Clear();
//start a new set
history.Add(new History
{
DealerID = row["DealerID"].ToString(),
VisitedStoreName = row["DealerName"].ToString(),
VisitedDate = row["Date"].ToString(),
Activity = row["Activity"].ToString(),
VehicleID = row["VehicleID"].ToString(),
VehicleName = row["CarModel"].ToString(),
OCN = row["OCN"].ToString(),
Source = row["Source"].ToString()
});
oldID = row["CustomerID"].ToString();
}
}
json = JsonConvert.SerializeObject(new CustomerList
{
Customers = customer
});
答案 1 :(得分:0)
{
var jsonSerialiser = new JavaScriptSerializer();
string json = "";
DataTable dt = new DataTable();
dt = Common.GetData(txtDateFrom.Text, txtDateTo.Text);
DataView dv = new DataView(dt);
dv.Sort = "MobileNumber, Date";
string oldID = "";
List<CustomerList> customerLists = new List<CustomerList>();
List<Customer> customer = new List<Customer>();
foreach (DataRowView row in dv)
{
if (string.IsNullOrEmpty(oldID))
{
List<History> history = new List<History>()
{
new History{
DealerID = row["DealerID"].ToString(),
VisitedStoreName = row["DealerName"].ToString(),
VisitedDate = row["Date"].ToString(),
Activity = row["Activity"].ToString(),
VehicleID = row["VehicleID"].ToString(),
VehicleName = row["CarModel"].ToString(),
OCN = row["OCN"].ToString(),
Source = row["Source"].ToString()}
};
oldID = row["CustomerID"].ToString();
customer.Add(new Customer {INI_CUSTOMER_ID = oldID, History = history});
}
else if(oldID.Equals(row["CustomerID"].ToString(), StringComparison.InvariantCultureIgnoreCase)) //compare old to new
{
List<History> history = new List<History>()
{
new History{
DealerID = row["DealerID"].ToString(),
VisitedStoreName = row["DealerName"].ToString(),
VisitedDate = row["Date"].ToString(),
Activity = row["Activity"].ToString(),
VehicleID = row["VehicleID"].ToString(),
VehicleName = row["CarModel"].ToString(),
OCN = row["OCN"].ToString(),
Source = row["Source"].ToString()}
};
customer.Add(new Customer { INI_CUSTOMER_ID = oldID, History = history});
}
else
{
List<History> history = new List<History>()
{
new History{
DealerID = row["DealerID"].ToString(),
VisitedStoreName = row["DealerName"].ToString(),
VisitedDate = row["Date"].ToString(),
Activity = row["Activity"].ToString(),
VehicleID = row["VehicleID"].ToString(),
VehicleName = row["CarModel"].ToString(),
OCN = row["OCN"].ToString(),
Source = row["Source"].ToString()}
};
oldID = row["CustomerID"].ToString();
customer.Add(new Customer { INI_CUSTOMER_ID = oldID, History = history });
}
}
foreach (var obj in customer.ToList())
{
var currentItem = customer.FindIndex(a => a.INI_CUSTOMER_ID.ToUpper() == obj.INI_CUSTOMER_ID.ToUpper()); //customer.IndexOf(obj);
for (int i = currentItem + 1; i < customer.Count; i++)
{
if (customer[currentItem].INI_CUSTOMER_ID.ToUpper() == customer[i].INI_CUSTOMER_ID.ToUpper())
{
customer[currentItem].History.InsertRange(customer[i].History.Count,customer[i].History);
customer.RemoveAt(i);
}
}
}
List<Customers> customers = new List<Customers>()
{
new Customers
{
CUSTOMERS = customer
}
};
json = JsonConvert.SerializeObject(customers);
Console.Write(json);
}
public class Customers
{
public List<Customer> CUSTOMERS { get; set; }
}
public class CustomerList
{
public string INI_CUSTOMER_ID { get; set; }
public List<History> History { get; set; }
}
public class Customer
{
public string INI_CUSTOMER_ID { get; set; }
public List<History> History { get; set; }
}