Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在C语言中解析XML并创建对象_C#_Xml_Linq To Xml - Fatal编程技术网

C# 如何在C语言中解析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</

我想从下面的XML创建白名单对象列表

创建了一个类白名单

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]);