c# - 在 JSON 转换期间过滤掉某些子对象

标签 c# .net serialization json.net deserialization

我不确定如何用文字解释我们的目标,所以我会直接跳到代码。

使用我们当前的 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"
}

如果我们有一个特定类型的对象(即 EntityIdPortfolioId),它保存属性中的值。所有这些 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;
    }
}

ExampleEvent

有没有人知道如何做到这一点。我认为这可能可以通过自定义 json 转换器实现,但还不知道如何在这种情况下实现它。

编辑:我应该说明这必须在多种事件类型中完成。为了保持低开销,通用的可重用解决方案似乎最适合。这意味着最好完全不更改事件类本身。 (所以最好没有属性等)

最佳答案

此答案中的第二种方法可能有助于操纵序列化。 Making a property deserialize but not serialize with json.net

关于c# - 在 JSON 转换期间过滤掉某些子对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51742489/

相关文章:

c# - 通过套接字TargetInvocationException进行二进制序列化/反序列化

c# - 如何序列化 Nullable<bool>?

c# - 如何将事件从 Facade 附加到另一个类

c# - 如何在应用程序启动时加载配置?

c# - 使用 InteractionRequests 设计一个 "busy"对话框

.net - 如何向 System.Windows.Forms.MenuItem 添加图标?

c# - .NET/C# 调试 : How to debug a classical heisenbug?

ember.js - ember-data 海关序列化

c# - 如何扩展继承的方法而不是覆盖它?

c# - 如何解析字符串以匹配 C# 中的模式