如何反序列化自定义对象列表

如何反序列化自定义对象列表

问题描述:

我真的遇到了试图通过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); 
+2

你为什么要返回byte []而不是FooReportRecord? – Phil 2013-03-18 22:54:01

+0

当您说“我的ASP.NET应用程序在3.5上运行”时,您的WCF服务托管在ASP.NET网站中吗?或者ASP.NET应用程序是客户端?我猜你在这里的意思是客户端 – EdmundYeung99 2013-03-18 23:20:14

+0

字节[]是尽量压扁对象列表的尝试。当我测试时,我可以使用字节数组与实际列表获得更多结果。 – HapiDjus 2013-03-19 21:47:03

假设您的客户端是.NET 3.5应用程序,并且FooReportRecord位于.NET 4 wcf库中,您将收到编译时错误。

移动FooReportRecord到3号的类库编译.NET 3.5中和参考这个来自您的WCF应用程序和客户端(ASP.NET)

但作为@Phil提到的,为什么不回到FooReportRecord [],而不是字节[]

服务

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"); 
+0

看完这一整天,我最终抛弃了将我的报告服务提升到4.0的全部理由。我返回的列表大小太大,无法尝试一些黑客的跨版本反序列化。直到我看到“为什么字节[]”,它才让我问自己同样的问题。谢谢您的帮助! – HapiDjus 2013-03-19 21:50:14