【发布时间】:2020-02-04 22:07:26
【问题描述】:
我试图在我的控制器中发布一个对象,但它是空的。该对象是一种复杂类型,并且怀疑它是我得到异常的原因。
public class CertificateRequest
{
public string Name {get;set;}
public string RequestNumber {get;set;}
public List<TradeUnit> TradeUnits {get;set;}
}
public class TradeUnit
{
public string TradeUnitNumber {get;set;}
}
控制器:
[HttpPost]
public IHttpActionResult Post(CertificateRequest req)
{
........
}
当我检查 Swagger 时,它所期望的对象似乎是完全不同的。
<CertificateRequest>
<Name>Some Name</Name>
<RequestNumber>Req001</RequestNumber>
<TradeUnits>
<TradeUnitNumber>TUN0005</TradeUnitNumber>
</TradeUnits>
</CertificateRequest>
当我想要发布多个 TradeUnit 并且我的结构将采用以下格式时,就会出现问题,我该如何实现。
<CertificateRequest>
<Name>Some Name</Name>
<RequestNumber>Req001</RequestNumber>
<TradeUnits>
<TradeUnit>
<TradeUnitNumber>TUN0001</TradeUnitNumber>
</TradeUnit>
<TradeUnit>
<TradeUnitNumber>TUN0002</TradeUnitNumber>
</TradeUnit>
<TradeUnit>
<TradeUnitNumber>TUN0003</TradeUnitNumber>
</TradeUnit>
</TradeUnits>
</CertificateRequest>
我怎样才能做到这一点?
【问题讨论】:
-
当序列化一个数组/列表时,网络库会自动生成两个标签,如
。要只获取一个标签,您需要放置一个 XmlElement : [XmlElement] public List TradeUnits { get;set;} -
它似乎确实有效。要获得这个提议的结构,我似乎需要为集合创建一个包装器,即在 CertificateRequest 类上有一个复杂的属性,称为 public TradeUnits TradeUnits {get;set;} 并且在该类内部有一个集合。当然必须有一种更清洁的方法来做到这一点。
标签: c# asp.net-web-api serialization asp.net-web-api2 xml-serialization