Ответ веб-службы.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 атрибуты для каждого поля или свойства, которое вы хотите сериализовать.

Другие вопросы по тегам