我想从xml文件中转换一个字符串以转换为ContactPersonType
有关需要输入字符串的位置,请参阅for循环
public class ContactPersonType
{
private String _id;
public String ID
{
get { return _id; }
set { _id = value; }
}
private String _name;
public String Name
{
get { return _name; }
set { _name = value; }
}
}
// ContactPerson class
private ContactPersonType _jobRole;
public ContactPersonType JobRole
{
get { return _jobRole; }
set { _jobRole = value; }
}
public static ObservableCollection<ContactPerson> getContactPerson()
{
ObservableCollection<ContactPerson> ContactPersons = new ObservableCollection<ContactPerson>();
XmlDocument doc = new XmlDocument();
doc.Load("contactpersoon.xml");
XmlNodeList elemList = doc.GetElementsByTagName("contact");
for (int i = 0; i < elemList.Count; i++)
{
//this needs to be casted to ContactPersonType
contactPerson.JobRole = elemList[i]["jobrole"].InnerText;
}
return ContactPersons;
}
答案 0 :(得分:0)
您是否可以使用如下所示的帮助程序将XML反序列化为.NET类?
public T Deserialize<T>(string fileName)
{
try
{
XmlSerializer sx = new XmlSerializer(typeof(T)); //or T.GetType?
StreamReader sr = new StreamReader(fileName);
var data = sx.Deserialize(sr);
sr.Close();
return (T)data;
}
catch (Exception ex)
{
throw;
}
}
我讨厌XmlDocument,所以总是在可能的情况下反序列化(虽然我喜欢的替代方案是XDocument)。
编辑 - 用法如下:
var item = Deserialize<ContactPersonType>(fileName);
答案 1 :(得分:0)
我对阅读XML元素的方式并不熟悉,因此这段代码可能需要进行一些调整,但这应该与您正在寻找的内容相符(也可以自由地使您的属性自动实现更高代码可读性)
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Xml;
using System.Xml.Linq;
namespace Program
{
public class ContactPersonType
{
public string ID { get; set; }
public string Name { get; set; }
}
public class ContactPerson
{
public ContactPersonType JobRole { get; set; }
public static ObservableCollection<ContactPerson> GetContactPerson()
{
var contactPersons = new ObservableCollection<ContactPerson>();
XElement doc = XElement.Load("contactpersoon.xml");
var contacts = doc.Elements("contact");
for (int i = 0; i < contacts.Count(); i++)
{
contactPersons.Add(new ContactPerson
{
JobRole = new ContactPersonType
{
ID = i.ToString(),
Name = contacts.ElementAt(i).Element("jobrole").Value
}
});
}
return contactPersons;
}
}
}
根据您设置ID属性的方式,您可以将循环重写为foreach。有关XElement及其成员的更多信息,请查看http://msdn.microsoft.com/en-us/library/system.xml.linq.xelement(v=vs.110).aspx和http://msdn.microsoft.com/en-us/vstudio/bb688087.aspx