xml反序列化包含c#中对象列表的对象列表

时间:2016-11-07 15:37:59

标签: c# xml deserialization

我正在尝试反序列化一个对象列表,而这些对象又包含其他对象的列表。我得到的是以下内容。 实际的反序列化由ApiContoller httpPost请求中的框架完成。端点如下所示:

    [HttpPost]
    public async Task<HttpResponseMessage> MethodCall([FromBody] XmlEntries entries)
    { 
     .... 
    }

XmlEntries类如下所示:

[XmlRoot("Root")]
public class XmlEntries
{
    [XmlArrayItem("XmlEntry")]
    public List<XmlEntry> XmlEntries{ get; set; }

    public XmlEntries()
    {
        XmlEntries = new List<XmlEntry>();
    }

    public XmlEntries(IEnumerable<XmlEntry> entries)
    {
        XmlEntries= entries.ToList();
    }
}

XmlEntry类如下所示:

public class XmlEntry
{
    [XmlArrayItem("XmlSubEntry")]
    public List<XmlSubEntry> XmlSubEntries{ get; set; }
}

并且XmlSubEntry看起来像这样。

public class XmlSubEntry
{
    string AttributeOne{ get; set; }
    int? AttributeTwo{ get; set; }
}

我一直在使用fiddler发送以下XML

<?xml version="1.0" encoding="utf-8"?>
<Root xmlns:xsd="http://www.w3.org/2001/XMLSchema"        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <XmlEntries>
    <XmlEntry>
      <XmlSubEntries>
        <XmlSubEntry>
          <AttributeOne>P</AttributeOne>
          <AttributeTwo>8</AttributeTwo>
        </XmlSubEntry>
        <XmlSubEntry>
          <AttributeOne>S</AttributeOne>
          <AttributeTwo>26</AttributeTwo>
        </XmlSubEntry>
      </XmlSubEntries>
    </XmlEntry>
  </XmlEntries>
</Root>

我的问题是XmlSubEntry的属性永远不会被正确序列化。当我在apiController中调试MethodCall时,条目将是一个包含1个XmlEntry的列表,其中XmlSubEntries是2个XmlSubEntry的列表,但属性(AttributeOne和AttributeTwo)始终为null。

我已经尝试过注释类在所有方面我都可以,但我仍然无法获得序列化更正的属性。

是否有任何XML-ninjas可以帮助我弄清楚我做错了什么?

1 个答案:

答案 0 :(得分:0)

我能给你的最好的建议是反过来 - 添加一些数据并将其序列化为XML,看看它是什么样的。这通常会指向你错在哪里。

但是,在这种情况下,您非常关闭。您唯一的问题是您无法将私有属性序列化,因此请将其公开:

public class XmlSubEntry
{
    public string AttributeOne { get; set; }
    public int? AttributeTwo { get; set; }
}