gpt4 book ai didi

c# - 如何在 C# 中将复杂对象存储在 Redis 哈希中?

转载 作者:IT王子 更新时间:2023-10-29 06:08:58 29 4
gpt4 key购买 nike

我必须将复杂对象存储到 redis 现金的哈希中。我正在使用 stackexchange.redis 来执行此操作。我的类如下所示。

 public class Company
{
public string CompanyName { get; set; }
public List<User> UserList { get; set; }
}
public class User
{

public string Firstname { get; set; }
public string Lastname { get; set; }
public string Twitter { get; set; }
public string Blog { get; set; }
}

我在 redis 中存储数据的代码片段是:

db.HashSet("Red:10000",comapny.ToHashEntries());

//以Redis格式序列化:

public static HashEntry[] ToHashEntries(this object obj)
{
PropertyInfo[] properties = obj.GetType().GetProperties();
return properties
.Where(x => x.GetValue(obj) != null) // <-- PREVENT NullReferenceException
.Select(property => new HashEntry(property.Name, property.GetValue(obj)
.ToString())).ToArray();
}

我可以将数据存储在 redis 中,但不是我想要的。我得到的结果如下图所示。 result after saving data in redis desktop manager我想要 json 格式的 UserList 值。那么,我该怎么做。

最佳答案

可能最简单的方法是检查每个属性值是否是一个集合(请参阅我修改后的方法版本中的注释):

public static HashEntry[] ToHashEntries(this object obj)
{
PropertyInfo[] properties = obj.GetType().GetProperties();
return properties
.Where(x => x.GetValue(obj) != null) // <-- PREVENT NullReferenceException
.Select
(
property =>
{
object propertyValue = property.GetValue(obj);
string hashValue;

// This will detect if given property value is
// enumerable, which is a good reason to serialize it
// as JSON!
if(propertyValue is IEnumerable<object>)
{
// So you use JSON.NET to serialize the property
// value as JSON
hashValue = JsonConvert.SerializeObject(propertyValue);
}
else
{
hashValue = propertyValue.ToString();
}

return new HashEntry(property.Name, hashValue);
}
)
.ToArray();
}

关于c# - 如何在 C# 中将复杂对象存储在 Redis 哈希中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42179839/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com