我是新來的XML,通常用於處理我的API的JSON,所以隨時告訴我是否試圖在這裏重新發明輪子。如何在運行時修改根XML標記?
故事背景:我目前正在開發一個集成,只允許我有一個端點支持多個請求,即搜索,銷售,更新,取消。他們只支持XML,所以我不能使用JSON。我從根XML名稱中確定請求的類型,完成我的工作,然後發回響應。
問題:因爲這是XML,所以我必須返回一個強類型的序列化對象,這使得我無法使用許多自定義類與[XmlRoot(ElementName = "blah")]
。因此,我需要在運行時設置根元素名稱以支持我必須發送的不同命名回覆。
我的響應類:
public class Response
{
public Errors Error { get; set; }
public RequestData Request { get; set; }
public List<Limo> Limos { get; set; }
public string ReservationID { get; set; }
public string Status { get; set; }
public string ConfNum { get; set; }
public string CancelPolicy { get; set; }
}
產生的
<?xml version="1.0" encoding="utf-16"?>
<Response xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Error>
<ErrorCode />
<ErrorSource />
<ErrorDescription />
</Error>
<Request>
<ServiceType>300</ServiceType>
<StartDateTime>2015-09-30T09:00:00</StartDateTime>
<NumPassengers>1</NumPassengers>
<VehicleType>100</VehicleType>
</Request>
<Limos />
</Response>
的響應基本上,我需要能夠改變<Response xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
成<SearchReply>
,<SellReply>
,<UpdateReply>
,或<CancelReply>
根據需要最終像這樣的東西
<?xml version="1.0" encoding="utf-16"?>
<SearchReply>
<Error>
<ErrorCode />
<ErrorSource />
<ErrorDescription />
</Error>
<Request>
<ServiceType>300</ServiceType>
<StartDateTime>2015-09-30T09:00:00</StartDateTime>
<NumPassengers>1</NumPassengers>
<VehicleType>100</VehicleType>
</Request>
<Limos />
</SearchReply>
我能想到的一種方式就是定義從Response類派生的新類SearchReply並將其用於響應。 –
@PankajKapare謝謝。我會給你一個機會,看看會發生什麼。 – Owen
雖然不確定,但您可能需要在應用程序啓動事件中使用xmlformatter註冊此新類型,如下所示var SearchReplyXmlFormatter = GlobalConfiguration.Configuration.Formatters.XmlFormatter; SearchReplyXmlFormatter .SetSerializer(new XmlSerializer(typeof(SearchReply))); –