我不确定如何用文字解释我们的目标,所以我会直接跳到代码。
使用我们当前的 json 转换器设置。转换我们的事件之一时,我们得到以下结果。
{
"PortfolioId": {
"Id": "portId"
},
"EntityId": {
"Id": "3cf7582b-3cad-4aeb-a671-0132ba97d60d"
},
"EventVersion": 1,
"OccurredOn": "2018-08-08T09:52:03.7871323+02:00",
"Id": "71fe3a2e-354a-4b19-abea-655471e96d72",
"Creator": {
"Id": "27a1d6b1-1ffa-4071-92ee-31c12bf120f0"
},
"CorrelationId": "3138dbe0-3a4d-4559-83e9-d1f3e5684ee8"
}
我们的目标是得到一个看起来像这样的转换事件;
{
"PortfolioId": "portId",
"EntityId": "3cf7582b-3cad-4aeb-a671-0132ba97d60d",
"EventVersion": 1,
"OccurredOn": "2018-08-08T09:52:03.7871323+02:00",
"Id": "71fe3a2e-354a-4b19-abea-655471e96d72",
"Creator": "27a1d6b1-1ffa-4071-92ee-31c12bf120f0",
"CorrelationId": "3138dbe0-3a4d-4559-83e9-d1f3e5684ee8"
}
如果我们有一个特定类型的对象(即 EntityId
、PortfolioId
),它保存属性中的值。所有这些 Id 类型都派生自具有属性“Id”的抽象类。
事件类如下所示。
public class ExampleEvent : DomainEvent
{
public PortfolioId PortfolioId { get; }
public EntityId EntityId { get;}
public ExampleEvent(
PortfolioId portfolioId,
EntityId entityId,
UserId creator, Guid correlationId) : base(creator, correlationId)
{
PortfolioId = portfolioId;
EntityId = entityId;
}
}
有没有人知道如何做到这一点。我认为这可能可以通过自定义 json 转换器实现,但还不知道如何在这种情况下实现它。
编辑:我应该说明这必须在多种事件类型中完成。为了保持低开销,通用的可重用解决方案似乎最适合。这意味着最好完全不更改事件类本身。 (所以最好没有属性等)
最佳答案
此答案中的第二种方法可能有助于操纵序列化。 Making a property deserialize but not serialize with json.net
关于c# - 在 JSON 转换期间过滤掉某些子对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51742489/