假设我所有的模型/poco都是记录,我们发现在很多情况下把模型转换成json是很有用的,这样我们就不必重写.ToString()了。在每个模型中,实体库记录都是用下面的方法创建的,并被其他模型继承:
public record EntityBase
{
public override string ToString()
{
return System.Text.Json.JsonSerializer.Serialize(this);
}
}
但我想知道是否有一种方法可以修改或扩展记录或类类型,这种方法几乎类似于扩展方法。
// record / class are not valid types here
public static string ToString(this record value)
=> System.Text.Json.JsonSerializer.Serialize(value);
// this works but I want to constrain it to records and non generic methods do not allow constraints
public static string ToString(this object value)
=> System.Text.Json.JsonSerializer.Serialize(value);
我可以想出一百万个理由来说明这可能是个坏主意,但我很好奇这是否可能?如果可能的话,有没有其他或更好的方法来修改这些类型?
1条答案
按热度按时间gjmwrych1#
根据documentation:
不存在要求类型为记录的泛型约束。记录满足类或结构约束。若要对记录类型的特定层次结构进行约束,请将约束作为基类放在基记录上。
因此,您可以定义一个抽象基本实体:
从中派生所有记录:
然后按如下方式定义扩展方法:
当然,如果你要这样做,你也可以把它放在BaseEntity中。