Ich habe eine einfache Klasse, sagen wir "Team" und ich einen WCF-Dienst (basicHttpBinding, in IIS gehostet) mit einer GetTeams-Operation, die ein Array von Team zurückgibt.Deserialisierung funktioniert nicht in WCF
Das Team Klasse sieht aus wie
[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; }
}
auf dem Client (Silverlight 3.0 app) ich alle Daten erhalten, aber die Eigenschaft Position hält eine Standard-Point-Instanz. Die Point-Struktur ist System.Windows.Media.Point, die serialisierbar ist. Ich fügte auch die X- und Y-Eigenschaften hinzu, um die Positionsdaten zu duplizieren, um zu sehen, ob sie direkt am anderen Ende der Leitung ankommen.
Die XML abgefangen (! Danke, Firebug) sieht so aus:
<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>
Daher scheint es eine Deserialisierung Problem. Keine Ausnahme wird geworfen!
Warum?
Die System.Windows.Point-Struktur ist Teil von .NET 3.0 und höher in der WindowsBase-Assembly. Silverlight bezieht sich auf dieselbe Struktur. –
SL Point befindet sich in C: \ Programme \ Referenz-Assemblies \ Microsoft \ Framework \ Silverlight \ v3.0 \ System.Windows.dll .Net3.5 Point befindet sich in C: \ Programme \ Reference Assemblies \ Microsoft \ Framework \ v3.0 \ WindowsBase.dll In meinem Objektbrowser habe ich zwei verschiedene Point-Strukturen, 1 für SL, 1 für. Net 3.0 - lohnt sich zu überprüfen. – Andrew
das sollte der .net3.0-Punkt offensichtlich gegeben werden, der Ordnersame framework 3.0. – Andrew