[英]Convert XML with Attributes to Object with LINQ
我有一個XML文件設置,如下所示:
<products>
<product>
<tradegood id = "11">Textiles</tradegood>
<baseprice>3000</baseprice>
<purchaseDMs>
<mod type="A">-7</mod>
<mod type="a">-5</mod>
<mod type="i">-3</mod>
</purchaseDMs>
<resaleDMs>
<mod type="A">-6</mod>
<mod type="a">1</mod>
<mod type="R">3</mod>
</resaleDMs>
<quantity>90</quantity>
</product>
我正在使用LINQ to XML,如下所示:
XDocument productList = XDocument.Load("products.xml");
List<Product> products =
(from objProduct in productList.Element("products").Elements("product")
select new Product
{
Id = int.Parse(objProduct.Element("tradegood").Attribute("id").Value),
ProductName = objProduct.Element("tradegood").Value,
BasePrice = double.Parse(objProduct.Element("baseprice").Value),
MaxQuantity = int.Parse(objProduct.Element("quantity").Value),
PurchaseDMs = (from _mods in objProduct.Element("purchaseDMs").Elements("mod")
select new
{
key = _mods.Attribute("type").Value,
value = _mods.Value
}),
ResaleDMs = (from _mods in objProduct.Element("resaleDMs").Elements("mod")
select new
{
key = _mods.Attribute("type").Value,
value = _mods.Value
})
}).ToList;
以下是產品類別:
public class Product
{
private string p_ProductName;
private double p_BasePrice;
private int p_MaxQuantity;
private double p_ActualValue;
private int p_id;
private int p_Quantity;
public string ProductName
{
get { return p_ProductName; }
set { p_ProductName = value; }
}
public double BasePrice
{
get { return p_BasePrice; }
set { p_BasePrice = value; }
}
public int MaxQuantity
{
get { return p_MaxQuantity; }
set { p_MaxQuantity = value; }
}
public int QuantityAvailable
{
get { return p_Quantity; }
set { p_Quantity = value; }
}
public double ActualValue
{
get { return p_ActualValue; }
set { p_ActualValue = value; }
}
public int Id
{
get { return p_id; }
set { p_id = value; }
}
public Dictionary<string, int> ResaleDMs;
public Dictionary<string, int> PurchaseDMs;
}
我無法弄清楚如何開始工作的唯一部分是ResaleDM和PurchaseDM。
select
語句均顯示“無法將類型'System.Collections.Generic.IEnumerable'隱式轉換為'System.Collections.Generic.Dictionary'。存在顯式轉換(您是否缺少類型轉換?”)
誰能幫我解決這個問題? 如何初始化這些字段?
之所以會出現該異常,是因為您正在為字典屬性分配IEnumerable投影的值。
當您這樣做時:
select new
{
key = _mods.Attribute("type").Value,
value = _mods.Value
}
您只是在創建具有兩個屬性(鍵和值)的新匿名對象類型。 這並不直接與字典條目對象類型相關。 相反,您可以使用ToDictionary擴展方法。
PurchaseDMs = objProduct.Element("purchaseDMs").Elements("mod")
.ToDictionary(e => e.Attribute("type").Value, e => Convert.ToInt32(e.Value)),
ResaleDMs = objProduct.Element("resaleDMs").Elements("mod")
.ToDictionary(e => e.Attribute("type").Value, e => Convert.ToInt32(e.Value))
我認為您應該能夠通過使用ToArray()獲得IEnumerable:
List<Product> products =
(from objProduct in productList.Element("products").Elements("product")
select new Product
{
Id = int.Parse(objProduct.Element("tradegood").Attribute("ID").Value),
ProductName = objProduct.Element("tradegood").Value,
BasePrice = double.Parse(objProduct.Element("baseprice").Value),
MaxQuantity = int.Parse(objProduct.Element("quantity").Value),
PurchaseDMs = (from _mods in objProduct.Element("purchaseDMs").Elements("mod")
select new
{
key = _mods.Attribute("type").Value,
value = _mods.Value
}),
ResaleDMs = (from _mods in objProduct.Element("resaleDMs").Elements("mod")
select new
{
key = _mods.Attribute("type").Value,
value = _mods.Value
})
}).ToArray();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.