在尝试通过 WCF 服务反序列化自定义对象列表时,我确实遇到了障碍。它使用 .NET 4。我如何绕过不同的命名空间。我的 ASP.NET 应用程序在 3.5 上运行,引用设置正常。这可能是问题所在吗?我该如何绕过它?
我的服务是这样设置的:
契约(Contract)
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);
最佳答案
假设您的客户端是您的 .NET 3.5 应用程序并且 FooReportRecord 在您的 .NET 4 wcf 库中,您将遇到编译时错误。
将 FooReportRecord 移动到在 .NET 3.5 中编译的第三类库,并从您的 WCF 应用程序和客户端 (ASP.NET) 引用它
但是正如@Phil 提到的,为什么不返回 FooReportRecord[] 而不是 byte[]
服务
public FooReportRecord[] GetFooReport(string fooName)
{
var data = new List<FooReportRecord>();
// get data based on fooName and populate data
return data.ToArray();
}
客户端
var proxy = new ServiceReference1.CompanyReportClient();
FooReportRecord[] ls = proxy.GetFooReport("bar");
关于c# - 如何反序列化自定义对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15488408/