解析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;
}
答
您可以通过序列化对象做到这一点。 “序列化”是指以某种方式获取对象的状态并持久化它的过程,Microsoft .NET Framework包含可将任何对象序列化为XML的强大对象,System.Xml.Serialization命名空间提供了此功能。 “
+0
谢谢你的回应,这将是我的第二部分非常好,我试图像的例子,它工作正常。 – Danny
问题是,我试图向他们插入值的类请求的所有属性不存在。这是我的主要problam – Danny
这个问题是在第二天,如果我能看到的属性在类为什么我得到他们没有定义,我不能设置属性值。 – Danny
你可以改变你的类的所有实例以包含它的名字空间吗?例。将列表更改为列表 –
Pinoy2015