如何将传入的 XML 绑定到 .Net 核心中的不同名称的 class

How to bind incoming XML to a differently named class in .Net core

我正在.net core 中重写一个API,它必须能够支持xml 和json 中的输入。我已经在我的启动 class.

中添加了 XmlSerializerFormatters

API 的先前版本通过 HTTP POST 接收到名为“XMLObject”的模型的输入,并且 XML posted到 API 有根元素 <XMLObject> - Json post 到 API 当然不需要命名的根元素。

在我的新版本 API 中,我真的不想称呼我的模型 XMLObject - 原因我希望很明显 - 但仍然愿意支持 XML以 <XMLObject> 作为根元素。

所以我正在寻找的是 class 这样的:

public class CustomerSubmission
{
    public string Id { get; set; }

    [Required]
    public string Submitter { get; set; }

    [Required]
    public string EncodedData { get; set; }
}

我的控制器中有一个这样的方法:

[HttpPost( "submissionURL" )]
public async Task<IActionResult> PostSubmission( [FromBody] CustomerSubmission Incoming )
{
     //do something with Incoming.ID, Incoming.Submitter, etc...
}

但仍然允许客户像这样 post XML :

<XMLObject>
    <Id>632174</Id>
    <Submitter>Lorem Ipsum PLC</Submitter>
    <EncodedData>7987428509348750983725.....</EncodedData>
</XMLObject>

我该怎么做?是否可以将 xml 根元素映射到不同的 class 名称?

我认为您需要使用 xml 元素的名称修饰 CustomerSubmission class。我用自定义 json serialisation/deserialisation 格式化程序做类似的事情。例如,您可以使用传入的 json 道具的名称装饰一个道具,所以我想您可以用它来做一些事情。虽然从来没有用 xml 做过。看看这个post:

是的,这是可能的。您可以对 class 使用 [XmlRoot("YourClassName")],对字段使用 [XmlElement("ORDER_LIST")]