C# 将XML解析为对象
以下是XML:C# 将XML解析为对象,c#,xml,linq,C#,Xml,Linq,以下是XML: <?xml version="1.0" encoding="utf-8" ?> <object> <body>tests</body> <send_results type="null" /> <note_class>none</note_class> <users type="list" /> <title>tes
<?xml version="1.0" encoding="utf-8" ?>
<object>
<body>tests</body>
<send_results type="null" />
<note_class>none</note_class>
<users type="list" />
<title>test</title>
<time_sent type="null" />
<image type="null" />
<to_customers type="boolean">False</to_customers>
<time_created>2013-06-26T16:40:50</time_created>
<num_sends type="integer">0</num_sends>
<time_scheduled type="null" />
<dealership>/api/v1/dealerships/10/</dealership>
<id type="integer">22</id>
<send_rate>none</send_rate>
<send_method>email</send_method>
<reply_to_email>do_not_reply@williamson-cadillac.com</reply_to_email>
<response_link type="null" />
<to_users type="boolean">True</to_users>
<resource_uri>/api/v1/notifications/22/</resource_uri>
</object>
我在变量“query”中不断得到“nothing”或“null”
我想不出来,我试过很多不同的方法。感谢您在这些问题上的帮助。我复制了您的代码,并将其直接粘贴到控制台应用程序中。它完全按照预期工作 您是否可以向我们展示其他可能对结果产生影响的内容 这是我使用的完整示例,以防您正在做一些不同的事情
string xml =
@"<?xml version='1.0' encoding='utf-8' ?>
<object>
<body>tests</body>
<send_results type='null' />
<note_class>none</note_class>
<users type='list' />
<title>test</title>
<time_sent type='null' />
<image type='null' />
<to_customers type='boolean'>False</to_customers>
<time_created>2013-06-26T16:40:50</time_created>
<num_sends type='integer'>0</num_sends>
<time_scheduled type='null' />
<dealership>/api/v1/dealerships/10/</dealership>
<id type='integer'>22</id>
<send_rate>none</send_rate>
<send_method>email</send_method>
<reply_to_email>do_not_reply@williamson-cadillac.com</reply_to_email>
<response_link type='null' />
<to_users type='boolean'>True</to_users>
<resource_uri>/api/v1/notifications/22/</resource_uri>
</object>";
var parsedXml = XDocument.Parse(xml);
var query = from m in parsedXml.Descendants("object")
select new Notifications
{
Body = (string)m.Element("body"),
SendResults = (string)m.Element("send_results"),
NoteClass = (string)m.Element("note_class"),
Users = m.Element("users").Elements().Select(e => (string)e.Element("value")).ToList(),
Title = (string)m.Element("title"),
TimeSent = (string)m.Element("time_sent"),
Image = (string)m.Element("image"),
ToCustomers = (string)m.Element("to_customers"),
TimeCreated = (string)m.Element("time_created"),
NumSends = (string)m.Element("num_sends"),
TimeScheduled = (string)m.Element("time_scheduled"),
Dealership = (string)m.Element("dealership"),
Id = (string)m.Element("id"),
SendRate = (string)m.Element("send_rate"),
SendMethod = (string)m.Element("send_method"),
ReplyToEmail = (string)m.Element("reply_to_email"),
ResponseLink = (string)m.Element("response_link"),
ToUsers = (string)m.Element("to_users"),
ResourceUri = (string)m.Element("resource_uri"),
};
Console.WriteLine("Number of items = {0}, {1}",query.Count(), query.FirstOrDefault().Body);
Console.ReadLine();
stringxml=
@"
测验
没有一个
试验
假的
2013-06-26T16:40:50
0
/api/v1/经销商/10/
22
没有一个
电子邮件
不要_reply@williamson-卡迪拉克网站
真的
/api/v1/notifications/22/
";
var parsedXml=XDocument.Parse(xml);
var query=来自parsedXml.substands(“对象”)中的m
选择新通知
{
Body=(字符串)m.Element(“Body”),
SendResults=(string)m.Element(“send_results”),
NoteClass=(字符串)m.Element(“note_class”),
Users=m.Element(“Users”).Elements()。选择(e=>(字符串)e.Element(“value”)).ToList(),
Title=(字符串)m.Element(“Title”),
TimeSent=(字符串)m.Element(“发送的时间”),
Image=(字符串)m.Element(“Image”),
ToCustomers=(string)m.Element(“to_customers”),
TimeCreated=(string)m.Element(“time_created”),
NumSends=(字符串)m.Element(“num_发送”),
TimeScheduled=(字符串)m.Element(“计划的时间”),
经销商=(字符串)m.Element(“经销商”),
Id=(字符串)m.Element(“Id”),
SendRate=(字符串)m.Element(“发送速率”),
SendMethod=(string)m.Element(“send_方法”),
ReplyToEmail=(字符串)m.Element(“reply_to_email”),
ResponseLink=(字符串)m.Element(“响应链接”),
ToUsers=(字符串)m.Element(“给用户”),
ResourceUri=(字符串)m.Element(“资源uri”),
};
WriteLine(“项目数={0},{1}”、query.Count()、query.FirstOrDefault().Body);
Console.ReadLine();
您没有显示正在解析的XML,我们理所当然地认为它已正确完成。可以肯定的是,您应该从文件中加载它,或者像这样解析字符串
//Load Xml file
var document = XDocument.Load(@"c:\temp\test.xml");
//Parse Xml
var document = XDocument.Parse(xml);
如果在起始于var query
的行上放置断点,那么当它点击checkparsedXml
时,确保它具有预期值
另外,您应该有这样的功能,您当前缺少一个根节点
<?xml version="1.0" encoding="utf-8" ?>
<objects>
<object>
...
<object>
</objects>
...
最后,如果您已经有了一个这样反序列化的类,那么使用LINQ与反序列化是不同的。如果您只是选择一个现有类,那么LINQ就是您想要的。确保您正在使用正确的工具进行作业。请包含如何创建
parsedXml
的代码。您可以编译该代码吗?因为它是substands
而不是decentants
像p.s.w.g发布的那样,除非我们看到它是如何创建的,否则我们不能做很多事情。但您可以单击此链接以作为检查well@CSharpie你为什么喜欢其中一个?我知道,在过去,.Elements()比.subjections()更适合人们的需要。是Jsut提出的,不是暗示。虽然这是一个好观点,但它并没有回答问题。这是一种观点。我怀疑这一问题是由于其他原因造成的。我希望op可以提供更多细节,如果他/她仍然有问题。这仍然应该是一个评论。我同意。。。除了你不能在评论中放截图。我认为“在我的机器上工作”是一种没有证据的逃避。
<?xml version="1.0" encoding="utf-8" ?>
<objects>
<object>
...
<object>
</objects>