C# .Net Rest Web服务响应具有默认的数据协定命名空间,而不是预期的命名空间

C# .Net Rest Web服务响应具有默认的数据协定命名空间,而不是预期的命名空间,c#,.net,wcf,xml-serialization,datacontract,C#,.net,Wcf,Xml Serialization,Datacontract,详情: 接口合同: [OperationContract] [WebGet(UriTemplate = "test")] TestType TestOperation(); 类型定义: [System.Xml.Serialization.XmlRoot(ElementName = "Test", Namespace="http://test.net/", IsNullable=false)] public partial class TestType { 实际结果: <TestType

详情:

接口合同:

[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/ …

如果这是WCF服务,则默认情况下使用。尝试使用属性来装饰类:

[DataContract(Name = "Test", Namespace="http://test.net/")]
public partial class TestType {

注意:您还需要向每个要序列化的字段或属性添加
DataMember
属性。

服务正在使用
DataContractSerializer
序列化响应,因此需要数据协定命名空间。为了覆盖这一点,我建议对操作应用XmlSerialzeFormat属性,如下所示

[OperationContract]
[WebGet(UriTemplate = "test")]
[XmlSerializerFormat]
TestType TestOperation();

事实上,转换为DataContract属性可以修复上面简单的“测试”示例,但在我们的场景中,我们已经将相当大的XML模式转换为C#类。因此,转换这么多XMLSerializer属性似乎并不实际。谢谢。下面的链接可能会有所帮助。。。
[OperationContract]
[WebGet(UriTemplate = "test")]
[XmlSerializerFormat]
TestType TestOperation();