[英]How to set Namespace for DataContract?
我遇到一種情況,我有一個由用戶調用的REST控制器,然后該控制器從上游請求數據並接收JSON作為響應。 然后,此JSON轉換為XML,並作為響應發送回用戶。 問題是我無法為XML根元素設置特定的名稱空間。 我正在使用DataContractSerializer。
我對.NET並沒有真正的經驗,並且以前主要使用JSON,所以我對下一步的嘗試感到迷茫。
我試圖使用ContractNamespaceAttribute設置名稱空間,例如:
[assembly: ContractNamespaceAttribute("http://schemas.datacontract.org/2004/07/APIBridge.Models", ClrNamespace = "APIBridge.Models")]
namespace APIBridge.Models
{
[DataContract]
public class Order
{
// DataMembers here...
}
}
我還嘗試在DataContracAttribute中設置名稱空間,例如:
namespace APIBridge.Models
{
[DataContract(Name = "Order", Namespace =
"http://schemas.datacontract.org/2004/07/APIBridge.Models")]
public class Order
{
// Datamembers here...
}
}
我希望如何設置名稱空間是:
<ArrayOfOrder xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/APIBridge.Models">
但是實際結果是:
<ArrayOfOrder xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
在上面的DataContractAttribute文檔中,它說:
“默認情況下,將DataContractAttribute應用於類時,它將使用類名稱作為本地名稱,並使用該類的名稱空間(前綴為“ http://schemas.datacontract.org/2004/07/ ”)作為名稱空間URI ”。
實際上,這將是期望的結果,但作為默認的命名空間,我將得到與上述相同的結果。 為什么是這樣?
有任何想法嗎?
更新:低於要求的服務操作
public List<Order> loadOrdersBasic(UserOptions userOpts)
{
List<Order> orders = new List<Order>();
HttpClient httpClient = AuthenticationHelper.CreateHttpClient(userOpts, options);
String url = String.Format("api/orders?supplier_no={0}", userOpts.SupplierId);
HttpResponseMessage response = httpClient.GetAsync(url).Result;
if (response.IsSuccessStatusCode)
{
orders = response.Content.ReadAsAsync<List<Order>>().Result;
}
else {
throw new ServiceException(getHttpErrorMessage(url, response));
}
return orders;
}
回答我自己的問題。
原來,我在配置文件中錯過了XmlMediaTypeFormatter設置為使用XmlSerializer而不是DataContractSerializer的一行。 這將覆蓋默認名稱空間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.