Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.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/9/solr/3.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
Xml REST-ful WCF服务:反序列化C#字符串列表工作不正常_Xml_Wcf_Rest_Serialization - Fatal编程技术网

Xml REST-ful WCF服务:反序列化C#字符串列表工作不正常

Xml REST-ful WCF服务:反序列化C#字符串列表工作不正常,xml,wcf,rest,serialization,Xml,Wcf,Rest,Serialization,我有一个REST-ful WCF服务,它返回XML响应。它由正确序列化和反序列化的对象组成,唯一的例外是节点上的“我的列表”属性未正确反序列化。XML看起来像: <ShippingGroups> <ShippingGroup> <ShippingGroupId> b0b4d8a4-ff1f-4f02-a47c-263ef8ac861b</ShippingGroupId> <ShippingAddressId> 63c0b

我有一个REST-ful WCF服务,它返回XML响应。它由正确序列化和反序列化的对象组成,唯一的例外是节点上的“我的列表”属性未正确反序列化。XML看起来像:

<ShippingGroups>
<ShippingGroup>
  <ShippingGroupId>
  b0b4d8a4-ff1f-4f02-a47c-263ef8ac861b</ShippingGroupId>
  <ShippingAddressId>
  63c0b52c-b784-4c27-a3e8-8adafba36add</ShippingAddressId>
  <LineItemIds xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
    <a:string>ccc0f986-52d5-453e-adca-8ff4513c1d84</a:string>
  </LineItemIds>
</ShippingGroup>

b0b4d8a4-ff1f-4f02-a47c-263ef8ac861b
63c0b52c-b784-4c27-a3e8-8adafba36add
ccc0f986-52d5-453e-adca-8ff4513c1d84

出现问题的原因是,用于反序列化此XML的C#类需要一个列表lineItemId。我可以通过手动删除该名称空间并删除

有没有其他方法可以解决这个问题,比如:

<ShippingGroups>
<ShippingGroup>
  <ShippingGroupId>
  b0b4d8a4-ff1f-4f02-a47c-263ef8ac861b</ShippingGroupId>
  <ShippingAddressId>
  63c0b52c-b784-4c27-a3e8-8adafba36add</ShippingAddressId>
  <LineItemIds>
    <string>ccc0f986-52d5-453e-adca-8ff4513c1d84</string>
  </LineItemIds>
</ShippingGroup>

b0b4d8a4-ff1f-4f02-a47c-263ef8ac861b
63c0b52c-b784-4c27-a3e8-8adafba36add
ccc0f986-52d5-453e-adca-8ff4513c1d84

我想我有一个答案给你。没有看到您的
数据契约
,我只是在猜测您在使用什么以及数据的结构。但这是

为此,我使用VS2010、C#、WCF REST和.NET 4

默认情况下,集合或数组使用默认命名空间,以便在序列化时保持互操作性。因此,序列化的行为符合设计要求

如果您创建一个自定义集合并对其使用
CollectionDataContract
属性,则可以绕过此问题。然后,您可以更好地控制它的序列化方式,包括其名称空间。这里有一个来自MSDN的关于这个的例子

因此,我创建了一个自定义集合,并使用
CollectionDataContract
名称空间:

[CollectionDataContract(Namespace="")]
public class StringItem2 : Collection<string>
{
}
现在我已经完成了,我有了简单的WCF RESTful服务(GET):

当我请求此服务()时,我得到以下XML作为响应:

<SampleItem xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
 <Id>10</Id> 
 <StringItems2>
  <string>Hola</string> 
  <string>como</string> 
  <string>esta</string> 
  <string>usted</string> 
 </StringItems2>
 <StringValue>foo</StringValue> 
</SampleItem>

10
赫拉
科莫
埃斯塔
乌斯特
福

希望这能有所帮助。请让我知道是否有我遗漏的其他细节,或者是否有更多的问题。我会相应地更新我的答案。

我想我有一个答案给你。没有看到您的
数据契约
,我只是在猜测您在使用什么以及数据的结构。但这是

为此,我使用VS2010、C#、WCF REST和.NET 4

默认情况下,集合或数组使用默认命名空间,以便在序列化时保持互操作性。因此,序列化的行为符合设计要求

如果您创建一个自定义集合并对其使用
CollectionDataContract
属性,则可以绕过此问题。然后,您可以更好地控制它的序列化方式,包括其名称空间。这里有一个来自MSDN的关于这个的例子

因此,我创建了一个自定义集合,并使用
CollectionDataContract
名称空间:

[CollectionDataContract(Namespace="")]
public class StringItem2 : Collection<string>
{
}
现在我已经完成了,我有了简单的WCF RESTful服务(GET):

当我请求此服务()时,我得到以下XML作为响应:

<SampleItem xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
 <Id>10</Id> 
 <StringItems2>
  <string>Hola</string> 
  <string>como</string> 
  <string>esta</string> 
  <string>usted</string> 
 </StringItems2>
 <StringValue>foo</StringValue> 
</SampleItem>

10
赫拉
科莫
埃斯塔
乌斯特
福

希望这能有所帮助。请让我知道是否有我遗漏的其他细节,或者是否有更多的问题。我将相应地更新我的答案。

如何反序列化消息。该命名空间是由数据协定序列化程序添加的。如果您还可以显示如何定义数据协定,这可能会有所帮助。如何反序列化消息。该名称空间是由数据协定序列化程序添加的。如果您还可以展示如何定义数据协定,这可能会有所帮助。