/ / Objetos recursivos que causan stackoverflow en StackService.Redis client method Store () - c #, asp.net-mvc-3, nosql, redis, servicestack

Objetos recursivos que causan stackoverflow en el método de cliente StackService.Redis Store () - c #, asp.net-mvc-3, nosql, redis, servicestack

Tengo dos clases de POCO (Cuenta y Factura) y como puede ver (a continuación se muestran las maquetas de estas clases) son recursivas.

Cuando paso en un objeto factura con la cuentaconjunto de propiedades y luego tratar de almacenarlo usando el cliente redis, causa un stackoverlow debido a la recursión. A continuación se muestra un ejemplo de cómo hago la llamada.

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);
}
}
}

Ejemplo de mis clases de 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; }
}

Respuestas

1 para la respuesta № 1

La mayoría de los serializadores (ServiceStack incluido) no soporta referencias cíclicas. Este es un anti-patrón importante al diseñar DTOs.

Para resolver esto, quieres decir Serializadores de ServiceStack.Text para ignorar esa propiedad para la serialización que puede hacer usando la propiedad [IgnoreDataMember] o cambiándola para que no sea una propiedad pública o para cambiarla a un método.