0

I am trying to add a complex object into Redis but while retrieving the values from Redis I am getting certain values as null. Below is the rough sample I am trying. I have an complex object, I serialize that complex object using JsonConvert and add it in the Redis. The property CollectionID has two counts with respective values but after getting it from Redis and De-serializing makes the value as null.

The problem is that the class 'Customer' is an entity object and json serialize is not able to serialize that particular objectc#. Is there any possible solution for this scenario?

class Program
{
    private static IDatabase _cache;
    private static ConnectionMultiplexer _connection;

    static void Main(string[] args)
    {
        _connection = ConnectionMultiplexer.Connect("localhost");
        _cache = _connection.GetDatabase();

        List<Id> id = new List<Id>() { new Id() { ID = 10 }, new Id() { ID = 20 } };
        Collection<Customers> collection = new Collection<Customers>() { new Customers(id) };
        Product product = new Product(new Guid(), collection, 1);
        _cache.StringSet("Redis_Key", GetSerializedString(product));
        var value = JsonConvert.DeserializeObject<Product>(_cache.StringGet("Redis_Key"));
    }

    private static String GetSerializedString<Test1>(Test1 value)
    {
        return JsonConvert.SerializeObject(
                    value,
                    Formatting.Indented,
                    new JsonSerializerSettings
                    {
                        ReferenceLoopHandling = ReferenceLoopHandling.Serialize,
                        PreserveReferencesHandling = PreserveReferencesHandling.All
                    });
    }
}

public class Product
{
    public Product(
        Guid parentGuid,
        Collection<Customers> collection,
        int number)
    {
        _parentGuid = parentGuid;
        _collection = collection;
        _number = number;
    }

    private Guid _parentGuid;
    public Guid ParentGuid
    {
        get { return _parentGuid; }
    }

    private Collection<Customers> _collection;
    public Collection<Customers> Collection
    {
        get { return _collection; }
    }

    private int _number;
    public int number
    {
        get { return _number; }
    }
}

public class Customers : Entity
{
    .
    .
    .
    public Customers(IEnumerable<Id> id)
    {
        _id = id;
    }

    private IEnumerable<Id> _id;

    public IEnumerable<Id> CollectionID
    {
        get { return _id; }
    }
    .
    .
    .
}

public class Id
{
    public int ID { get; set; }
}
Anish
  • 219
  • 2
  • 12
  • it seems as the answer to your question https://stackoverflow.com/questions/60002178/values-are-being-null-while-getting-it-from-redis-for-complex-objects is not implemented yet. Did you try it? – LeoMurillo Feb 11 '20 at 17:59
  • I tried it is working for that case. But in this scenario, the class "Customers" is an entity class. I am not sure whether JsonConvert.SerializeObject can convert an entity class. So this class Customers is not getting serialized. – Anish Feb 12 '20 at 05:42
  • https://github.com/tombatron/NReJSON – Guy Korland Feb 12 '20 at 08:22

1 Answers1

1

I think the issue is that you public properties don’t have a setter only getter.

Please try adding setters and check again.

I hope that helps :)

Ricky Stam
  • 2,116
  • 21
  • 25