RavenDb:强制序列化指定给集合的声明类型而非继承类型

RavenDb:强制序列化指定给集合的声明类型而非继承类型,ravendb,Ravendb,我有以下ContractResolver,它用于属性,以确保将属性序列化为RavenDb,作为属性的声明类型,而不是指定的对象的实际继承类型。当您希望在数据库中存储对其他对象的引用(该数据库具有字段子集,但不存储整个对象,但使用整个对象设置属性)时,这非常适用 public class StrictTypeContractResolver : DefaultContractResolver { private readonly FieldInfo _IsSealedField = typ

我有以下ContractResolver,它用于属性,以确保将属性序列化为RavenDb,作为属性的声明类型,而不是指定的对象的实际继承类型。当您希望在数据库中存储对其他对象的引用(该数据库具有字段子集,但不存储整个对象,但使用整个对象设置属性)时,这非常适用

public class StrictTypeContractResolver : DefaultContractResolver
{
    private readonly FieldInfo _IsSealedField = typeof(JsonContract).GetField("IsSealed", BindingFlags.Instance | BindingFlags.NonPublic)!;

    public override JsonContract ResolveContract(Type type)
    {
        var resolveContract = base.ResolveContract(type);
        _IsSealedField.SetValue(resolveContract, true);
        return resolveContract;
    }
}
当您有一个ICollection或IList或任何类型的集合,并且要向其中添加具有相同引用的对象,然后是从引用继承的对象时,就会出现问题。如何使Icollection只序列化集合或列表的定义类型,而不是指定的对象