您好我在客户端收到此错误时尝试使用此WCF服务 我在网上搜索了一些解决方案,但是他们提出了循环依赖和无法序列化复杂对象的情况,这对我来说并非如此
我尝试发送的DataContract
[DataContract]
public class CapitalDTO
{
[DataMember]
public string ItemName { get; set; }
[DataMember]
public string ItemSize { get; set; }
[DataMember]
public string ItemBranch { get; set; }
[DataMember]
public double ItemPrice { get; set; }
[DataMember]
public int ItemCount { get; set; }
[DataMember]
public double Capital
{
get
{
return (double)ItemCount * ItemPrice;
}
}
}
那是尝试发送它的服务</ p>
public IEnumerable<CapitalDTO> GetCapital(int? BranchId = null)
{
using (var scope = container.BeginLifetimeScope())
{
unitOfWork = scope.Resolve<IUnitOfWork>();
var capital = unitOfWork.ItemsInBrranches.GetItemsInBranchesByBranch(BranchId).Select(c => new CapitalDTO
{
ItemBranch = c.Branch.Name,
ItemName = c.Item.Name,
ItemPrice = c.Item.Price,
ItemSize = c.Item.Size.Size,
ItemCount = c.Amount
});
return capital;
}
}
因为我仍然被认为是WCF的新手,我不确定我的问题在哪里,我需要一些帮助
更新 只有返回对象的方法才会返回此异常,因此我猜测它可能是所有0之后的序列化问题
答案 0 :(得分:0)
猜测 - 我怀疑所有属性都需要公共设置器,以便反序列化可以在客户端进行。由于'Capital'是一个计算属性,我建议完全删除它,或者在其中添加一个'虚拟'Setter,只有解串器会调用它,并且实际上不会做任何事情。
答案 1 :(得分:0)
显然,问题在于解决生活范围内的单元工作依赖性,似乎在WCF服务完成之前它与DbContext一起被处理
public IEnumerable<CapitalDTO> GetCapital(int? BranchId = null)
{
unitOfWork = container.Resolve<IUnitOfWork>();
var capital = unitOfWork.ItemsInBrranches.GetItemsInBranchesByBranch(BranchId).Select(c => new CapitalDTO
{
ItemBranch = c.Branch.Name,
ItemName = c.Item.Name,
ItemPrice = c.Item.Price,
ItemSize = c.Item.Size.Size,
ItemCount = c.Amount
});
return capital;
}
另外一件事,正如C. Knight所指出的那样,我应该定义一个公共设置器,以便将Capital属性序列化