目的是做一個通用的泛型類,將XML檔案資訊決議,并插入到資料庫中。
其中物體類部分,包含erpin和erpinbody兩個類,erpin類表示的是入庫物體類,erpbody類表示的是入庫資訊類,入庫資訊包含多條資料資訊,做這個泛型類的目的就是將一個XML檔案資訊決議的同時,將入庫單資訊部分插入erpin表里,將erpinbody資訊逐條插入到erpinbody類里面,我做了一個方法R2C,這個方法已經可以將erpin和erpinbdoy的資料分開并插入到資料庫中。
現在我想把R2C這個方法變成一個通用的泛型方法,但是轉完之后erpinbody里面的資料不知道怎么用泛型來提取。
物體類代碼:
[XmlRoot]
public class erpin
{
public int id { get; set; }
public string storageid { get; set; }
public string orderid { get; set; }
[XmlElement("erpinbody")]
public List<erpinbody> erpbodylist { get; set; }
}
[Serializable]
public class erpinbody
{
[XmlElement]
public int id { get; set; }
[XmlElement]
public string matecode { get; set; }
[XmlElement]
public string matename { get; set; }
[XmlElement]
public int count { get; set; }
[XmlElement]
public DateTime storagedate { get; set; }
[XmlElement]
public int hid { get; set; }
}
XML代碼:
<?xml version="1.0" encoding="utf-8" ?>
<erpin xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<id>1</id>
<storageid>eid2211</storageid>
<orderid>oid11</orderid>
<storagetype>01</storagetype>
<erpinbody>
<id>2</id>
<matecode>wl0001</matecode>
<matename>物料1</matename>
<count>2</count>
<storagedate>2020-03-10 </storagedate>
</erpinbody>
<erpinbody>
<id>3</id>
<matecode>wl0001</matecode>
<matename>物料1</matename>
<count>2</count>
<storagedate>2020-03-10 </storagedate>
</erpinbody>
</erpin>
一般的決議方法R2C
private string R2C(string xml)
{
List<T_RESULT> lResult = new List<T_RESULT>();
erpin model = DESerializerStringToEntity<erpin>(xml);
bool bRollback = false;
bool bResult = model.Insert<erpin>();
if (!bResult)
{
bRollback = true;
}
if (bResult)
{
foreach (erpinbody body in model.erpbodylist)
{
if (!bRollback)
{
bResult = body.Insert<erpinbody>();
}
if (!bResult)
{
bRollback = true;
}
}
}
Type t = typeof(erpin);
PropertyInfo[] pInfo = t.GetProperties();
//插入資訊失敗,回滾
if (bRollback)
{
model.Delete<erpin>(" id=" + model.id.ToString() + " ");
foreach (erpinbody body in model.erpbodylist)
{
body.Delete<erpinbody>(" id=" + body.id.ToString());
}
lResult.Add(new T_RESULT() { ID = model.id.ToString(), Result = "F" });
}
else
{
lResult.Add(new T_RESULT() { ID = model.id.ToString(), Result = "T" });
}
return XmlUtil.Serializer<T_RESULT>(lResult);
}
uj5u.com熱心網友回復:
我不是太明白你的意思。因為你說的通用泛型,我不清楚具體的通用是什么意思,
如果是繼承自一個基類那是可以的,如果要針對派生類那就很麻煩了,
除非使用反射。但是我看你拼接的字串," id=" + body.id.ToString()
這又沒辦法完全通過反射搞定。
uj5u.com熱心網友回復:
//插入資訊失敗,回滾
if (bRollback)
{
model.Delete<erpin>(" id=" + model.id.ToString() + " ");
foreach (erpinbody body in model.erpbodylist)
{
body.Delete<erpinbody>(" id=" + body.id.ToString());
}
lResult.Add(new T_RESULT() { ID = model.id.ToString(), Result = "F" });
}
else
{
lResult.Add(new T_RESULT() { ID = model.id.ToString(), Result = "T" });
}
return XmlUtil.Serializer<T_RESULT>(lResult);
回滾這部分可以單獨來做
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/60549.html
標籤:C#
