2

这是 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>

我正在尝试将 Xml 解析为一个对象...

       var query = from m in parsedXml.Decendants("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"),
                    };

我继续在变量“查询”中得到“无”或“空”。

我无法弄清楚 - 我尝试了很多不同的东西。感谢您在这些问题上的帮助。

4

2 回答 2

2

我复制了您的代码并直接将其粘贴到控制台应用程序中。它完全按预期工作。

在此处输入图像描述

您还可以向我们展示可能对结果产生影响的其他内容吗?

这是我使用的完整示例,以防您做一些不同的事情......

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(); 
于 2013-06-28T18:37:41.403 回答
0

您没有显示您的 XML 正在被解析,我们理所当然地认为它已正确完成。可以肯定的是,您应该从文件中加载它或解析这样的字符串。

//Load Xml file
var document = XDocument.Load(@"c:\temp\test.xml");

//Parse Xml 
var document = XDocument.Parse(xml);

如果您在开头的行上放置一个断点var query,那么当它命中时检查parsedXml以确保它具有预期值。

此外,您真的应该有这样的东西,您目前缺少一个根节点。

  <?xml version="1.0" encoding="utf-8" ?> 
  <objects>
     <object>
         ...
     <object>
  </objects>

最后,如果您已经有一个可以正确反序列化的类,则使用 LINQ 与反序列化不同。如果您只是选择现有的类,那么 LINQ 就是您想要的。确保您使用正确的工具来完成这项工作。

于 2013-07-02T07:05:24.070 回答