servicestack,C#,Serialization,Redis,servicestack" /> servicestack,C#,Serialization,Redis,servicestack" />

C# 如何(反)序列化类型作为属性的键,但作为根对象时的完整POCO?

C# 如何(反)序列化类型作为属性的键,但作为根对象时的完整POCO?,c#,serialization,redis,servicestack,C#,Serialization,Redis,servicestack,我正在探索如何使用ServiceStack和Redis在Redis中为一个项目持久化文档。如果我可以在一个文档类型中使用getter和setter,它们在内存中本机引用其他文档类型,但在反序列化时作为标量键引用属性的redis位置,那就太好了。比如: public class Sport { public string Key { get; set; } public string Name { get; set; } public int RandomFactNumbe

我正在探索如何使用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'}
将一项运动和一名球员序列化为:

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的密钥,并将其作为一项运动进行反序列化,并将其分配给我的玩家实例的运动属性

我已经研究了JsConfig反序列化fn和rawderserializefn,我认为我可以让我的类型从一个简单的基本文档类型派生出来,使用一个键,并将文档从字符串键转换到字符串键,但我看到的问题是,将为根实例和属性调用该函数


在服务堆栈中是否有自定义属性反序列化器重写的概念?或者有更好的方法吗?

为什么不保留一个字符串EntityId,特别是SportId属性?是的,我不介意这样做,只是不喜欢必须编写大量重复的get密钥,转到存储库并加载对象代码。感觉我们最终得到了两个条目——Key属性和基于Key获取对象的GetEntity方法。为bug和错误提供了更多的空间,提供了更多的样板文件。看起来这可能是一个副本。我更喜欢从一个id加载对象,该id有很多副作用,例如IO等,在我的代码中非常明确,而不是在SerializerSems后面施法。但是如果我真的要用这种方式来设计,用一点魔法,我能用servicestack来设计吗?