我正在探索使用 ServiceStack 和 Redis 将文档保存在项目的 redis 中。如果我可以在文档类型中使用 getter 和 setter 来在内存中本地引用其他文档类型,但在(反)序列化时作为标量键来引用属性的 redis 位置,那将是整洁的(也许)。就像是:
public class Sport
{
public string Key { get; set; }
public string Name { get; set; }
public int RandomFactNumberOfPlayers { get; set; }
// lots of other random properties about sport I don't want to duplicate in my player serialization
}
public class Player
{
public string Key { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Sport { get; set; }
}
会将一项运动和一名球员序列化为:
{key: 'a', name: 'Football', randomFactNumberOfPlayers: 123456},
{key: 'b', firstName: 'Tom', lastName: 'Brady', sport: 'b'}
在反序列化这些记录时,我将有机会查看我的 redis 存储库并获取 b 的密钥并将其作为 Sport 并将其分配给我的 player 实例的 sport 属性。
我看了一点 JsConfig (De)serializeFn 和 Raw(De)serializeFn,我认为我可以让我的类型派生自一个(简单)基本 Document 类型,带有一个键和(de)ser 文档往返字符串键,但我看到的问题是该函数将为根实例和属性调用。
服务堆栈中是否有任何自定义属性(反)序列化程序覆盖的概念?还是有更好的方法来做到这一点?