Я действительно ударил блокпост, пытаясь десериализовать список пользовательских объектов по службе WCF. Он использует .NET 4. Как мне обойти разные пространства имен. Мое приложение ASP.NET работает на 3.5, и эта ссылка настраивается нормально. Это может быть проблема? Как мне обойти это?Как десериализовать список настраиваемых объектов
Моя служба настроена так:
Контракт
namespace MyDomain.Services.Report
{
[ServiceContract(Name = "ICompanyReport")]
public interface ICompanyReport
{
[OperationContract]
byte[] GetFooReport(string fooName);
}
[Serializable]
[DataContract(Name="FooReportRecord", Namespace="MyDomain.com"]
public class FooReportRecord
{
[DataMember]
public int ID {get; set;}
[DataMember]
public string Name {get; set;}
}
}
svc.cs
public class CompanyReport: ICompanyReport
{
public byte[] GetFooReport(string fooName)
{
var data = new List<FooReportRecord>();
// get data based on fooName and populate data
var ms = new MemoryStream();
var bf = new BinaryFormatter();
bf.Serialize(ms, data);
return ms.ToArray();
}
}
стороне клиента:
var ls = proxy.GetFooReport("bar");
var bf = new BinaryFormatter();
var ms = new MemoryStream(ls);
// Unable to find assembly MyDomain.Services.Report error is thrown
var reportData = (List<FooReportRecord>)bf.Deserialize(ms);
Почему вы возвращаете байт [], а не FooReportRecord? – Phil
Когда вы говорите: «Мое приложение ASP.NET работает на 3,5» - это ваш сервис WCF, размещенный на веб-сайте ASP.NET? или приложение ASP.NET является клиентом? Я предполагаю, что вы имеете в виду клиента здесь – EdmundYeung99
Байт [] был попыткой сжать как можно больше списка объектов. Когда я тестировал, я мог получить больше результатов, используя массив байтов и фактический список. – HapiDjus