如何解析语言XML并在C#中创建对象

问题描述 投票:0回答:2

我想从下面的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>
c# xml linq-to-xml
2个回答
1
投票

这是使用您的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;
}

0
投票

我创建的通用类,用于将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]);
© www.soinside.com 2019 - 2024. All rights reserved.