C# Json:展平泛型引用属性

C# Json:展平泛型引用属性,c#,json,json.net,C#,Json,Json.net,解释这一点最简单的方法是通过展示示例,因此我将从以下内容开始: 我有三个目标: public class Foo { public string FooString { get; set; } } public class Bar { public string BarInt { get; set; } } public class Message<T> { public string Subject { get; set; } public T

解释这一点最简单的方法是通过展示示例,因此我将从以下内容开始:

我有三个目标:

public class Foo
{
    public string FooString { get; set; }
}

public class Bar
{
    public string BarInt { get; set; }
}

public class Message<T>
{
    public string Subject { get; set; }
    public T Value { get; set }
}
消息
变为

{
    "subject": "FooSubject",
    "value": {
        "fooString": "abc"
    }
}
{
    "subject": "BarSubject",
    "value": {
        "barInt": 123
    }
}
有没有办法使用Newtonsoft.JSON将内部泛型对象合并到消息中?或者有没有其他方法将两个C#类合并到同一个JSON对象中?这意味着消息的最终结果如下所示:

{
    "subject": "FooSubject",
    "fooString": "abc"
}
这当然会导致命名冲突,但在我的例子中,这很容易避免。我不想使用继承来处理它,因为Foo/Bar并不总是消息,但消息将包含其中一个

另一件事是泛型对象可能包含我不想展平的其他对象


谢谢

这是将一个模型映射到另一个模型,最好使用AutoMapper之类的工具。Json.NET是序列化程序,而不是映射程序。通常,API的消息模型与服务使用的域模型不同。模型应该能够独立发展。如果在序列化过程中尝试将一个类映射到另一个类,则无法轻松做到这一点。我理解您的观点,但我仅将这些类用作包含数据的对象。这只是一个例子,我正在处理的真实案例是与金融相关的,类别是Position,其中T将是金融工具,如期权、股权、IRS。然后,这些对象永远不会真正映射到域对象(我的文章所讲的内容除外),而是将数据用于计算。然而,我觉得这不是我最强烈的主题。你知道有什么文章或书籍能很好地解释这种建模吗?这正是重点。JSON输出是API签名/应用程序合同。如果您的DTO发生更改,它不应该更改。顺便说一句,数据用于计算,这就是域对象的意义所在。如果使用它们执行计算,则它们不再是DTO。在本例中,您的域是财务计算。这些对象应该有一个使计算尽可能容易的形式。换句话说,你永远不会根据FIX协议的结构来建模这些类。不,你是对的!然而,我可能解释得很糟糕;这些值将被“重新映射”到我们不同的引擎所期望的状态,或者至少这些对象中的数据将被用作这些计算的输入,但这不是1:1映射;发动机预计会有其他型号。此外,这不是一个公共API,只能从其他内部服务中使用。这听起来还“不对”吗?我是否应该重新思考我们如何传输数据?我最初的计划是建立一个定义“传输模型”(DTO?)的库,供不同的服务使用,这是一种糟糕的做法吗?谢谢