我想从下面的XML创建白名单对象列表
创建了一个类WhiteList
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>[email protected]</from>
<to>[email protected]</to>
</whitelist>
<whitelist>
<id>1452</id>
<from>[email protected]</from>
<to>[email protected]</to>
</whitelist>
<whitelist>
<id>9483</id>
<from>[email protected]</from>
<to>[email protected]</to>
</whitelist>
<whitelist>
<id>5654</id>
<from>ewrgre@loansdfglosers</from>
<to>[email protected]</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的路径
Response response = XMLParser<Response>.Deserialize([path of XML]);