У меня есть простой класс, скажем, «Команда», и я предоставляю службу WCF (basicHttpBinding, размещенную в IIS) с помощью операции GetTeams, которая возвращает массив Team.Deserialization не работает в WCF
классКоманда выглядит
[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 приложения) я получаю все данные, но свойство Позиция хранит экземпляр по умолчанию точки. Строка Point - это System.Windows.Media.Point, которая является сериализуемой. Я также добавил свойства 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>
Поэтому кажется, что есть проблема десериализации. Исключено исключение!
Почему?
Структура System.Windows.Point является частью .NET 3.0 и выше в сборке WindowsBase. Silverlight относится к той же структуре. –
SL Точка находится в C: \ Program Files \ Reference Assemblies \ Microsoft \ Framework \ Silverlight \ v3.0 \ System.Windows.dll .Net3.5 Точка находится в папке C: \ Program Files \ Reference Assemblies \ Microsoft \ Framework \ v3.0 \ WindowsBase.dll В моем браузере объектов у меня есть две различные структуры Point, 1 для SL, 1 для .Net 3.0 - проверка. – Andrew
, который должен быть точкой .net3.0, очевидно, учитывая имя папки фреймворка 3.0. – Andrew