Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WCF RestFul服务上的XML反序列化_C#_.net_Wcf - Fatal编程技术网

C# WCF RestFul服务上的XML反序列化

C# WCF RestFul服务上的XML反序列化,c#,.net,wcf,C#,.net,Wcf,我有以下类(不介意名称空间): 当我发布ReqBody2的Xml序列化时,服务会正确地接收并反序列化对象的根属性。但是,来自ReqBody2Internal的属性都为空 经营合同为: [OperationContract] [WebInvoke(UriTemplate = "Invoke2",RequestFormat=WebMessageFormat.Xml , ResponseFormat=WebMessageFormat.Xml)] void Invoke2(ReqBody2 req);

我有以下类(不介意名称空间):

当我发布ReqBody2的Xml序列化时,服务会正确地接收并反序列化对象的根属性。但是,来自ReqBody2Internal的属性都为空

经营合同为:

[OperationContract]
[WebInvoke(UriTemplate = "Invoke2",RequestFormat=WebMessageFormat.Xml , ResponseFormat=WebMessageFormat.Xml)]
void Invoke2(ReqBody2 req);
这是我使用Fiddler发布的一个Xml示例:

<?xml version="1.0" encoding="utf-8"?><ReqBody2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.test.com/ReqBody2">
<pass>HOLA</pass>
<Req><Field1>asd</Field1><Field2>asd</Field2><Field3>asd</Field3><Field4>extra value</Field4></Req>
<RequestDate>2013-04-04T14:10:38</RequestDate>
<Tout>30000</Tout>
</ReqBody2>

你好
ASDASDEXTRA值
2013-04-04T14:10:38
30000
我希望能够访问Req属性,但在服务器上它们是空的


关于为什么会发生这种情况的任何线索?

正在发布的文档有一个默认名称空间,定义为:

xmlns="http://www.test.com/ReqBody2"
这意味着,除非指定,否则所有子元素都将继承此XML命名空间。这包括
Req
元素,该元素将被反序列化为
ReqBody2Internal
类型的元素

但是,
ReqBody2Internal
类型的命名空间声明为
http://www.test.com/ReqBodyInternal
。这意味着子XML元素应该来自此命名空间才能正确反序列化,但它们继承默认命名空间,因此序列化程序将其视为“错误”元素


要解决此问题,您需要更改数据契约上的名称空间声明以共享相同的名称空间,或者更改XML以为
Req
元素的子元素指定正确的名称空间。

作为旁白:您不需要将
KnownType
属性应用于类。它们用于类型发现,但是如果序列化程序反映了类型本身,那么类型就已经是已知的了。实际上,我使用它是因为服务应该响应JSON和Xml。如果KnownType不存在,我会遇到JSON序列化问题。我的重点是让Xml工作,JSON在我添加ResponseFormat和RequestFormat属性之前就已经工作了。我想JSON现在不起作用了,我还没有试过。我怀疑名称空间不匹配是你的问题
xmlns="http://www.test.com/ReqBody2"