我正在尝试反序列化一个对象列表,而这些对象又包含其他对象的列表。我得到的是以下内容。 实际的反序列化由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可以帮助我弄清楚我做错了什么?
答案 0 :(得分:0)
我能给你的最好的建议是反过来 - 添加一些数据并将其序列化为XML,看看它是什么样的。这通常会指向你错在哪里。
但是,在这种情况下,您非常关闭。您唯一的问题是您无法将私有属性序列化,因此请将其公开:
public class XmlSubEntry
{
public string AttributeOne { get; set; }
public int? AttributeTwo { get; set; }
}