解析XML到类使用LINQ

问题描述:

我有一个类,它定义了一个请求xml 我想用linq来解析xml到类(稍后做相反的) 我得到那个请求是空的,并在函数返回该类的所有礼节“MidaClientID‘MidaClientID’这个名字在目前情况下不存在”解析XML到类使用LINQ

public class Request 
    { 
     public int MidaClientID { get; set; } 

     public int Password { get; set; } 

     public int CandNum { get; set; } 

     public string CandFirstName { get; set; } 

     public string CandLastName { get; set; } 

     public int CandPhone1 { get; set; } 

     public int CandPhone2 { get; set; } 

     public int CandPhone3 { get; set; } 

     public string CandAttach1 { get; set; } 

     public string CandAttach2 { get; set; } 

     public string CandAttach3 { get; set; } 

     public int ClientNum { get; set; } 

     public string ClientName { get; set; } 

     public int ContactNum { get; set; } 

     public string ContactFirstName { get; set; } 

     public string ContactLastName { get; set; } 

     public string ContactEmail { get; set; } 

     public int EventNum { get; set; } 

     public DateTime EventDate { get; set; } 

     public DateTime EventTime { get; set; } 

     public int QuestNum { get; set; } 

    } 


[WebMethod] 
     public void GetXml() 
     { 
      XDocument doc = XDocument.Load(@".xml"); 
      List<Request> req = CreateRequest(doc); 
     } 


     public static List<Request> CreateRequest(XDocument input) 
     { 
      IEnumerable<Request> req = from r in input.Descendants("Request") 
             select new Request() 
             { 
              //MidaClientID = (int)r.Attribute("MidaClientID"), 
              MidaClientID = Convert.ToInt32(r.Element("MidaClientID").Value), 
              Password = (int)r.Attribute("MidaClientPassword"), 
              CandNum = (int)r.Attribute("CandNum"), 
              CandFirstName = (string)r.Attribute("CandFirstName"), 
              CandLastName = (string)r.Attribute("CandLastName"), 
              CandPhone1 = (int)r.Attribute("CandPhone1"), 
              CandPhone2 = (int)r.Attribute("CandPhone2"), 
              CandPhone3 = (int)r.Attribute("CandPhone3"), 
              CandAttach1 = (string)r.Attribute("CandAttach1"), 
              CandAttach2 = (string)r.Attribute("CandAttach2"), 
              CandAttach3 = (string)r.Attribute("CandAttach3"), 
              ClientNum = (int)r.Attribute("ClientNum"), 
              ClientName = (string)r.Attribute("ClientName"), 
              ContactNum = (int)r.Attribute("ContactNum"), 
              ContactFirstName = (string)r.Attribute("ContactFirstName"), 
              ContactLastName = (string)r.Attribute("ContactLastName"), 
              ContactEmail = (string)r.Attribute("ContactEmail"), 
              EventNum = (int)r.Attribute("EventNum"), 
              EventDate = (DateTime)r.Attribute("EventDate"), 
              EventTime = (DateTime)r.Attribute("EventTime"), 
              QuestNum = (int)r.Attribute("QuestNum") 
             }; 
      return new List<Request> { }; 
     } 

为什么你越来越空的原因是因为你是返回列表的新实例。

return new List<Request> { }; 

可以更换的代码上面的行至

return req; 

如以下代码所示。

public static List<Request> CreateRequest(XDocument input) 
     { 
      IEnumerable<Request> req = from r in input.Descendants("Request") 
             select new Request() 
             { 
              //MidaClientID = (int)r.Attribute("MidaClientID"), 
              MidaClientID = Convert.ToInt32(r.Element("MidaClientID").Value), 
              Password = (int)r.Attribute("MidaClientPassword"), 
              CandNum = (int)r.Attribute("CandNum"), 
              CandFirstName = (string)r.Attribute("CandFirstName"), 
              CandLastName = (string)r.Attribute("CandLastName"), 
              CandPhone1 = (int)r.Attribute("CandPhone1"), 
              CandPhone2 = (int)r.Attribute("CandPhone2"), 
              CandPhone3 = (int)r.Attribute("CandPhone3"), 
              CandAttach1 = (string)r.Attribute("CandAttach1"), 
              CandAttach2 = (string)r.Attribute("CandAttach2"), 
              CandAttach3 = (string)r.Attribute("CandAttach3"), 
              ClientNum = (int)r.Attribute("ClientNum"), 
              ClientName = (string)r.Attribute("ClientName"), 
              ContactNum = (int)r.Attribute("ContactNum"), 
              ContactFirstName = (string)r.Attribute("ContactFirstName"), 
              ContactLastName = (string)r.Attribute("ContactLastName"), 
              ContactEmail = (string)r.Attribute("ContactEmail"), 
              EventNum = (int)r.Attribute("EventNum"), 
              EventDate = (DateTime)r.Attribute("EventDate"), 
              EventTime = (DateTime)r.Attribute("EventTime"), 
              QuestNum = (int)r.Attribute("QuestNum") 
             }; 
      return req; 

}

+0

问题是,我试图向他们插入值的类请求的所有属性不存在。这是我的主要problam – Danny

+0

这个问题是在第二天,如果我能看到的属性在类为什么我得到他们没有定义,我不能设置属性值。 – Danny

+0

你可以改变你的类的所有实例以包含它的名字空间吗?例。将列表更改为列表 Pinoy2015

您可以通过序列化对象做到这一点。 “序列化”是指以某种方式获取对象的状态并持久化它的过程,Microsoft .NET Framework包含可将任何对象序列化为XML的强大对象,System.Xml.Serialization命名空间提供了此功能。 “

http://support.microsoft.com/kb/815813

+0

谢谢你的回应,这将是我的第二部分非常好,我试图像的例子,它工作正常。 – Danny