您好,我需要发送这样一个 XML 文档
<tlist>
<t>
<ScheduleId>12254</ScheduleId>
...
</t>
<t>
<ScheduleId>333333</ScheduleId>
...
</t>
</tlist>
添加了支持"application/xml" services.AddXmlSerializerFormatters()
[HttpPost]
[Produces("application/xml")]
public void Post([FromBody] ТипДляПриемаDto trainsList)
{
}
我创建了 TrainDto 类型并通过 GET 请求返回了一个 List,结果如下:
public class TrainDto
{
public int ScheduleId { get; set; }
}
<ArrayOfTrainDto xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<TrainDto>
<ScheduleId>0</ScheduleId>
</TrainDto>
</ArrayOfTrainDto>
也就是说,对象的集合被包装在<ArrayOf...>
默认处理程序的标记中。
告诉我如何编写自己的 XML 处理程序,还是必须接受 XML 作为字符串并自己解析它?
ArrayOfTrainDto 为您解决问题仅仅是因为它是根元素,除了数据类型之外,没有其他地方可以为它取名。如果需要特殊名称,则需要特殊数据类型。
XML 序列化器可以使用属性进行自定义:
我注意到,只有“根数组”情况才需要单独的容器类型。对于其他地方的数组,可以通过 XmlArrayAttribute 创建一个容器(如果根本不使用任何属性,它也会默认创建):
但是,一般来说,复杂的 xml 文档通常使用 xsd 模式来描述。根据这个方案,你可以使用xsd.exe自动获取所有必要的类