2017-03-15 5 views
0

私はC#コアでWeb APIを構築しており、エンドポイントの1つが提供するXML出力をカスタマイズする必要があります。ASP.NET CoreカスタムXMLモデルの出力方法

public class SageInvoice { 

    public long Id { get; set; } 

    public DateTime Created { get; set; } 

    public long? CustomerId { get; set; } 

    public long? JobId { get; set; } 

    public DateTime Date { get; set; } 

    public decimal Subtotal { get; set; } 

    public decimal VAT { get; set; } 

    public decimal Total { get; set; } 
} 

は、XMLが出てくる:

は、私はそうのようなヘッダーを受け入れて使用し、XMLやJSONを返すために私のアプリを設定するには:

 // Add framework services. 
     services 
      .AddMvc(options => { 
       options.RespectBrowserAcceptHeader = true; 
      }) 
      //support application/xml 
      .AddXmlDataContractSerializerFormatters() 
      //support application/json 
      .AddJsonOptions(options => { 
       options.SerializerSettings.ContractResolver = new DefaultContractResolver(); 
      }); 

をそして私は、私は、コントローラに返すモデルを持っていますそうですね:

<ArrayOfSageInvoice xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/AutomotiveDTO.DTOs.SageIntegration"> 
    <SageInvoice> 
     <Created>2017-03-15T11:09:34.21</Created> 
     <CustomerId>1</CustomerId> 
     <Date>2017-03-15T00:00:00</Date> 
     <Id>2</Id> 
     <JobId>1</JobId> 
     <Subtotal>100.00</Subtotal> 
     <Total>120.00</Total> 
     <VAT>20.00</VAT> 
    </SageInvoice> 
    <SageInvoice> 
     <Created>2017-03-15T11:11:26.853</Created> 
     <CustomerId>2</CustomerId> 
     <Date>2017-03-15T00:00:00</Date> 
     <Id>3</Id> 
     <JobId i:nil="true"/> 
     <Subtotal>23532.00</Subtotal> 
     <Total>28238.40</Total> 
     <VAT>4706.40</VAT> 
    </SageInvoice> 
</ArrayOfSageInvoice> 

私のエンドポイントの消費者は、このように構成されていて、より多くのk個:

<?xmlversion="1.0"encoding="utf-8"?> 
<Order> 
    <OrderSummary> 
     <OrderID>1</OrderID> 
     <OrderReference>ORDER1</OrderReference> 
     <OrderDate>2017-03-15</OrderDate> 
     <AccountNumber>ACCOUNT1</AccountNumber> 
     <CompanyName>Company 1</CompanyName> 
     <ContactTitle>Mr</ContactTitle> 
     <ContactFirst>Dave</ContactFirst> 
     <ContactLast>Dave</ContactLast> 
     <Address1/> 
     <Address2/> 
     <Town/> 
     <County/> 
     <Postcode/> 
     <Country/> 
     <Telephone></Telephone> 
     <NumberOfItems>2</NumberOfItems> 
     <OrderValue>200</OrderValue> 
     <Downloaded>false</Downloaded> 
    </OrderSummary> 
    <OrderSummary> 
    ... 
    </OrderSummary> 
</Order> 

どのように私は私のXML出力は、ヘッダJSON + XML入力/出力機能を受け入れ台無しことなく、上記に一致するように変更できますか?

+0

あなたはは 'まだofcourseの欠落しますか、あなたのクラスに追加する必要があります'ものの、タグの名前を変更するには、 '' [XML ... Atribute]を使用することができます。 –

+0

Tsengの答えがうまくいかない場合、私はそれを試してみることに感謝します。 – Smithy

+0

@JoelHarkes [Xml] mateにアクセスするにはどのようなパッケージが必要ですか? – Smithy

答えて

1

これが実行されます(MSDN参照)。ドキュメントは.NET Framework向けですが、.NET Coreにも適用する必要があります。

[CollectionDataContract(Name = "Invoice", ItemName = "InvoiceSummary")] 
public class SageInvoice 
{ 
    ... 
} 
+0

これらの名前空間を取得するには、どのパッケージをインストールする必要がありますか? – Smithy

+0

System.Runtime.Serialization.Xmlにパッケージを追加しました。自分の属性をクラスの先頭に追加しました。出力がまったく得られません。 – Smithy

+0

DataMember属性とDataContract属性にも影響はありません。/ – Smithy

関連する問題