.net 使用linq将xml解析为类
我有一个定义请求xml的类 我想稍后使用linq将xml解析到类,以实现相反的目的 我得到的结果是req为null,并且在返回类所有properties midclientid的函数中,名称“midclientid”在当前上下文中不存在.net 使用linq将xml解析为类,.net,linq,.net,Linq,我有一个定义请求xml的类 我想稍后使用linq将xml解析到类,以实现相反的目的 我得到的结果是req为null,并且在返回类所有properties midclientid的函数中,名称“midclientid”在当前上下文中不存在 public class Request { public int MidaClientID { get; set; } public int Password { get; set; } public
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> { };
}
可以通过序列化对象来实现这一点 序列化是获取对象状态并以某种方式将其持久化的过程。Microsoft.NET Framework包含功能强大的对象,可以将任何对象序列化为XML。System.Xml.Serialization命名空间提供了此功能
可以通过序列化对象来实现这一点 序列化是获取对象状态并以某种方式将其持久化的过程。Microsoft.NET Framework包含功能强大的对象,可以将任何对象序列化为XML。System.Xml.Serialization命名空间提供了此功能
得到null的原因是因为返回列表的新实例
return new List<Request> { };
如下面代码所示
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;
}获取空值的原因是返回列表的新实例
return new List<Request> { };
如下面代码所示
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;
}谢谢您的回复,这对我的第二部分非常好,我尝试了这个例子,效果很好。谢谢您的回复,这对我的第二部分非常好,我试着像这个例子一样,但效果很好。问题是,我试图插入值的类请求中的所有属性都不存在。这是我的主要问题。这个问题困扰了我第二天,如果我能在类中看到属性,为什么我得到的属性没有定义,并且我不能将值设置为属性。你能更改你的类的所有实例以包含它的命名空间吗?实例将列表更改为列表问题已解决,我没有在日期时间属性中正确插入值问题是我尝试向其插入值的类请求中的所有属性都不存在。这是我的主要问题。这个问题困扰了我第二天,如果我能在类中看到属性,为什么我得到的属性没有定义,并且我不能将值设置为属性。你能更改你的类的所有实例以包含它的命名空间吗?实例将列表更改为列表问题解决后,我没有在date time属性中正确插入值