Ответ веб-службы.Net Rest имеет пространство имен контракта по умолчанию, а не ожидаемое пространство имен
Подробности:
Контракт интерфейса:
[OperationContract]
[WebGet(UriTemplate = "test")]
TestType TestOperation();
Определение типа:
[System.Xml.Serialization.XmlRoot(ElementName = "Test", Namespace="http://test.net/", IsNullable=false)]
public partial class TestType {
Фактический результат:
<TestType xmlns=http://schemas.datacontract.org/2004/07/ …
Ожидаемый результат:
<Test xmlns= http://test.net/ …
Пожалуйста, порекомендуйте.
2 ответа
Решение
Сервис использует DataContractSerializer
для сериализации ответа и, следовательно, требует пространства имен контракта данных. Чтобы переопределить это, я бы порекомендовал применить атрибут XmlSerialzeFormat к операции следующим образом...
[OperationContract]
[WebGet(UriTemplate = "test")]
[XmlSerializerFormat]
TestType TestOperation();
Если это служба WCF, по умолчанию она использует сериализаторы контрактов данных. Попробуйте вместо этого использовать атрибуты контракта данных для украшения вашего класса:
[DataContract(Name = "Test", Namespace="http://test.net/")]
public partial class TestType {
Примечание: вам также нужно добавить DataMember
атрибуты для каждого поля или свойства, которое вы хотите сериализовать.