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/silverlight/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
反序列化在WCF中不起作用_Wcf_Silverlight_Serialization_Point - Fatal编程技术网

反序列化在WCF中不起作用

反序列化在WCF中不起作用,wcf,silverlight,serialization,point,Wcf,Silverlight,Serialization,Point,我有一个简单的类,比如“Team”,我使用GetTeams操作公开了一个WCF服务(basicHttpBinding,托管在IIS中),该操作返回一个Team数组 团队课看起来像 [DataContract] public class Team { [DataMember] public int Id { get; set; } [DataMember] public Point Position { get; set; } [DataMember]

我有一个简单的类,比如“Team”,我使用GetTeams操作公开了一个WCF服务(basicHttpBinding,托管在IIS中),该操作返回一个Team数组

团队课看起来像

[DataContract]
public class Team
{
    [DataMember]
    public int Id { get; set; }
    [DataMember]
    public Point Position { get; set; }
    [DataMember]
    public string Code { get; set; }
    [DataMember]
    public bool Available { get; set; }
    [DataMember]
    public string Extra { get; set; }
    [DataMember]
    public double X { get; set; }
    [DataMember]
    public double Y { get; set; }
}
在客户端(Silverlight 3.0应用程序)上,我获得了所有数据,但Position属性保存了一个默认点实例。点结构是可序列化的。我还添加了X和Y属性来复制位置数据,以查看它是否位于导线的另一端

截获的XML(谢谢,Firebug!)如下所示:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
    <GetTeamsResponse xmlns="http://tempuri.org/">
        <GetTeamsResult xmlns:a="http://schemas.datacontract.org/2004/07/MyProject.Data" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
            <a:Team>
                <a:Code>A23HJGF23</a:Code>
                <a:Available>true</a:Available>
                <a:Extra i:nil="true"/>
                <a:Id>1</a:Id>
                <a:Position xmlns:b="http://schemas.datacontract.org/2004/07/System.Windows">
                    <b:_x>572194.59937858</b:_x>
                    <b:_y>322518.3889979</b:_y>
                </a:Position>
                <a:X>572194.59937858</a:X>
                <a:Y>322518.3889979</a:Y>
            </a:Team>
            <!-- other <a:Team> elements -->
        </GetTeamsResult>
    </GetTeamsResponse>
</s:Body>
</s:Envelope>

A23HJGF23
真的
1.
572194.59937858
322518.3889979
572194.59937858
322518.3889979
因此,似乎存在反序列化问题没有引发异常


为什么?

简单说明一下,当SL尝试使用SL point类时,您的WCF服务是否返回.net 3/3.5 point类?或者它们都是指相同的点结构

我认为您正在将.Net版本传递给SL版本,因为datacontract位置中的名称空间似乎表明您正在使用CLR/WPF点,这与SL点不同

WCF端点将使用ISerializable来更改为XMLSerializer,而不是数据协定序列化器,因此您将看到数据,但它是一个自定义类,具有您目前在XML中看到的_x和_y

编辑:

为了清楚地显示结构位置

SL3点结构位于System.Windows.DLL()中 .Net 3.0点结构位于windowsbase.dll()中 WindowsBase.dll()中的.Net 3.5点结构

在比较.net和SL时,名称相同,但类不同


另外,它发生在SL 2.0中,并在SL网站上报告。()

看起来客户端无法识别数据类型

正如您所指出的,System.Windows.Media.point在.Net 3.0和Silverlight中


您可以尝试在数据协定中将点声明为System.Windows.Media.Point。还要确保在客户端项目中引用了必要的dll。

System.Windows.Point结构是WindowsBase程序集中.NET 3.0及以上版本的一部分。Silverlight引用了相同的结构。SL点位于C:\Program Files\Reference Assembly\Microsoft\Framework\Silverlight\v3.0\System.Windows.dll中。Net3.5点位于C:\Program Files\Reference Assembly\Microsoft\Framework\v3.0\WindowsBase.dll中。在我的对象浏览器中,我有两个不同的点结构,1表示SL,1对于.net3.0-值得检查。如果框架3.0文件夹名为,那么这应该是.net3.0点。