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();