在Stack Service上导致堆栈溢出的递归对象.Redis客户端方法Store()

时间:2012-08-11 04:21:48

标签: c# asp.net-mvc-3 nosql redis servicestack

我有两个POCO类(帐户和发票),正如您所看到的(下面是这些类的模型),它们是递归的。

当我传入一个设置了帐户属性的发票对象,然后尝试使用redis客户端存储它时,由于递归而导致堆栈转移。以下是我如何拨打电话的示例。

CachingService.Store<Invoice>(invoiceObj);


public class CachingService {
    // ....
    public static void Store<T>(T obj)
    {
        using (var client = _redisClientsManager.GetClient())
        {   
            var typedClient = client.GetTypedClient<T>();
            typedClient.Store(obj);
        }
    }
}

我的POCO课程示例:

public class Account
{
    public string Name { set; get; }
    public bool IsActive { set; get; }

    public virtual ICollection<Invoice> Invoices { set; get; }
}

public class Invoice
{
    public bool IsPaid { set; get; }
    public DateTime? LastSent { set; get; }
    public int AccountId { set; get; }

    public virtual Account Account { set; get; }
}

1 个答案:

答案 0 :(得分:1)

大多数序列化程序(包含ServiceStack)不支持循环引用。在设计DTO时,这是一种主要的反模式。

要解决此问题,您希望告诉ServiceStack.Text's serializers忽略序列化的属性,您可以使用[IgnoreDataMember]属性或更改它来使其不是公共属性或将其更改为方法。