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

标签 c# .net wcf asp.net-3.5

在尝试通过 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/

相关文章:

iphone - 通过 SSL (https) + basicHttpBinding 使用 Monotouch 使用 WCF 服务

wcf - 使用 CustomBinding 进行抢占式身份验证?

c# - 在 c# asp.net ajax POST 请求中读取请求负载

c# - 直接设置字典元组值

.net - 每 100 秒收集一次垃圾

c# - Visual Studio 中的程序集缓存问题

c# - 为什么 "object[]"不起作用?

javascript - 使用 scriptmanager.registerstartupscript 显示对话框

C# 配置文件

wcf - IE中是否可以进行https到http的跨域请求?