У меня есть ситуация, когда у меня есть контроллер 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">
https://docs.microsoft.com/en-us/dotnet/api/system.runtime.serialization.datacontractattribute?redirectedfrom=MSDN&view=netframework-4.8
В документации 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;
}