[英]Read from XML Using Linq and add it to a list containing objects
我正在嘗試從XML文件讀取並將每個聯系人添加到聯系人列表,但我得到的錯誤是無法將列表轉換為列表
為聯系人中的每個聯系人編寫一個xml文件(Works)
var path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
var xEle = new XElement("Contact",
from contact in contacts
select new XElement("Contact",
new XAttribute("Name", contact.Name),
new XElement("Address", contact.StreetAddress),
new XElement("AreaCode", contact.AreaCode),
new XElement("City", contact.City),
new XElement("Phone", contact.Phone),
new XElement("Email", contact.Email)
));
xEle.Save(path + "\\contacts.xml");
從xml讀取並將其添加到列表中(不起作用!)
XDocument xmlDoc = XDocument.Load(path + "\\contacts.xml");
contacts = (List<Contact>)xmlDoc.Descendants("Contact");
XML文件輸出
<Contacts>
<Contact Name="Nils Nilsson">
<Address>MyStreet 17B</Address>
<AreaCode>55555</AreaCode>
<City>BigCity</City>
<Phone>0705555555</Phone>
<Email>mail@gmail.com</Email>
</Contact>
</Contact>
接觸類
public class Contact
{
public string Name { get; set; }
public string StreetAddress { get; set; }
public string AreaCode { get; set; }
public string City { get; set; }
public string Phone { get; set; }
public string Email { get; set; }
}
我現有的清單
List<Contact> contacts = new List<Contact>();
正如指出的那樣,你的原始代碼不起作用的原因是LINQ to XML中的所有查詢返回某種形式的XObject
-最常見的XAttribute
或XElement
。 它不會將任何內容映射到Contact
。
將XML映射到對象的最簡單方法是利用對XML序列化的內置支持。 您的類需要幾個屬性和一個額外的類才能映射到您的XML結構:
[XmlRoot("Contacts")]
public class Contacts : List<Contact>
{
}
public class Contact
{
[XmlAttribute]
public string Name { get; set; }
[XmlElement("Address")]
public string StreetAddress { get; set; }
public string AreaCode { get; set; }
public string City { get; set; }
public string Phone { get; set; }
public string Email { get; set; }
}
然后按如下所示讀取您的XML:
using (var reader = XmlReader.Create(Path.Combine(path, "contacts.xml"))
{
var serializer = new XmlSerializer(typeof(Contacts));
var contacts = (Contacts)serializer.Deserialize(reader);
}
請注意,您還可以在第一個實例中使用Serialize
方法創建XML。
您可以嘗試如下操作:
var xmlDoc = XDocument.Load(path + "\\contacts.xml");
var xElements = xmlDoc.Descendants("Contact");
var xmlSerializer = new XmlSerializer(typeof(Contact));
contacts = xElements.Select(xe => (Contact)xmlSerializer.Deserialize(xe.CreateReader())).ToList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.