C# 如何在C语言中解析XML并创建对象
我想从下面的XML创建白名单对象列表 创建了一个类白名单C# 如何在C语言中解析XML并创建对象,c#,xml,linq-to-xml,C#,Xml,Linq To Xml,我想从下面的XML创建白名单对象列表 创建了一个类白名单 class WhiteList { public string ID { get; set; } public string From { get; set; } public string To { get; set; } } 我需要用XML创建对象列表 <Response> <list> <whitelist> <id>1234</
class WhiteList
{
public string ID { get; set; }
public string From { get; set; }
public string To { get; set; }
}
我需要用XML创建对象列表
<Response>
<list>
<whitelist>
<id>1234</id>
<from>sdfkmsfk@wfgtitleco.com</from>
<to>dsfgsdf@loansdfglosers.com</to>
</whitelist>
<whitelist>
<id>1452</id>
<from>mdsfgaursdfgdfmimi@gmail.com</from>
<to>dfsgdscew@loansdfglosers.com</to>
</whitelist>
<whitelist>
<id>9483</id>
<from>prvs=17958ac559=dmcclain@wfgtitleco.com</from>
<to>status@loansdfglosers.com</to>
</whitelist>
<whitelist>
<id>5654</id>
<from>ewrgre@loansdfglosers</from>
<to>werferw@loansdfglosers.com</to>
</whitelist>
</list>
</Response>
下面是一个使用XML文档的简单示例:
public static List<WhiteList> CreateObjects(XDocument xmldoc)
{
var query = from data in xmldoc.Descendants("whitelist")
select new WhiteList
{
ID = (string)data.Element("id"),
From = (string)data.Element("from"),
To = (string)data.Element("to"),
};
var list = query.ToList();
List<WhiteList> result = new List<WhiteList>();
// now create the desierd list
foreach (var x in list)
{
WhiteList ws = new WhiteList();
ws.ID = x.ID;
ws.From = x.From;
ws.To = x.To;
result.Add(ws);
}
return result;
}
我创建的一个泛型类,用于将XML序列化和反序列化为.net对象,反之亦然 您需要添加一个助手类,如下所示。只需将名称空间更改为您的项目
using System.IO;
using System.Xml.Serialization;
namespace YourProject
{
public class XMLParser<T> where T : class
{
public static T Deserialize(string path)
{
T item;
try
{
var serializer = new XmlSerializer(typeof(T));
using (var reader = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read))
{
item = (T)serializer.Deserialize(reader);
reader.Dispose();
}
}
catch (System.Exception)
{
throw;
}
return item;
}
public static void Serialize(object item, string path)
{
var serializer = new XmlSerializer(typeof(T));
using (var fs = new FileStream(path, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite))
{
using (var writer = new StreamWriter(fs))
{
serializer.Serialize(writer, item);
writer.Close();
writer.Dispose();
}
}
}
}
}
现在,您的类不再使用XML,所以您需要稍微更改一下您的类
class Response{
public List<WhiteList> list{get; set;}
}
class WhiteList{
public string ID {get;set;}
public string From {get;set;}
public string To {get;set;}
}
现在您可以调用XMLParser类来序列化或反序列化XML或.net对象。
下面是电话
只需提供XML的路径
也许提问者应该考虑创建一个xsd模式。@DrkDeveloper为什么?OP已获得此步骤的代码。。。然后OP可以问另一个问题。。。更严重的是,为什么您认为XSD有助于解析?@AlexeiLevenkov不解析,它有助于使xml文件与您需要的结构保持一致。
Response response = XMLParser<Response>.Deserialize([path of XML]);