2017-04-12 3 views
1

xmlとjsonの両方で入力をサポートできる必要がある.netコアでAPIを書き直しています。私は既にスタートアップクラスにXmlSerializerFormattersを追加しました。.NETコアで別の名前のクラスに入ってくるXMLをバインドする方法

以前のバージョンのAPIは、HTTP POSTを介して "XMLObject"というモデルに入力され、APIに投稿されたXMLはルート要素<XMLObject>を持っていました.JsonはもちろんAPIに投稿された名前付きルートは必要ありませんでした素子。私は明白であることを望む理由のために - - APIの私の新しいバージョンで

は、私は本当に、むしろ私のモデルXMLObjectを呼び出すことはありませ思いますが、それでもルート要素として<XMLObject>でXMLをサポートしたいと思います。

それでは、私が探していることは、このようなクラス持っていることです。

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... 
} 

そして、まだをまだお客様が投稿することができますこのようなXML:

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

どうすればいいですか? xmlルート要素を別のクラス名にマップすることは可能ですか?

+0

これはうまくいかなかったのですか? –

+0

CustomerSubmissionクラスをxml要素の名前で飾る必要があると思います。私は、カスタムJSONシリアライズ/デシリアライズフォーマッタで同様のことを行います。例えば、あなたはそれが何かをすることができると思いますので、入っているjsonの小道具の名前で小道具を飾ることができます。しかし、XMLでそれをやったことはありません。 この投稿を見てください:http://stackoverflow.com/questions/31490563/deserialize-xml-using-same-object-with-different-element-name – DarthJam

+0

@ MarkC。クラスとxml要素の名前が同じで、異なる場合でもjsonのために働いていれば、マッピングがxml okで機能することを確認しました。私はクラスを装飾する属性を探してみましたが、最初は間違った名前空間を探していたので、何も変えていませんでした。 –

答えて

0

CustomerSubmissionクラスをxml要素の名前で飾る必要があると思います。私は、カスタムJSONシリアライズ/デシリアライズフォーマッタで同様のことを行います。例えば、あなたはそれが何かをすることができると思いますので、入っているjsonの小道具の名前で小道具を飾ることができます。しかし、XMLでそれをやったことはありません。この投稿をご覧ください:

Deserialize Xml Using Same Object With Different Element Name

関連する問題