从 JSON.NET 中检索动态 class 名称?

Retrieve Dynamic class name from JSON.NET?

我正在使用 JSON.NET 通过网络接收消息。消息格式有些动态,因为消息将由许多不同的 classes 表示,每个都继承自父消息。例如:

{
    MessageName: "MessageType1",
    Data1: 124,
    Data2: "Something"
}


{
    MessageName: "MessageType2",
    OtherData: "Some data",
    MoreData: "Even more",
    ANumber: 25
}

我遇到的问题是,在 JSON.NET 中,我不知道如何找出 class (MessageType1/MessageType2/etc) 的名称以便将其反序列化为class 的一个实例,没有反序列化它两次。我考虑过几种选择;我目前使用的是使用一个包含消息名称的容器 class 和序列化为字符串的实际 json 消息,但这似乎很浪费。

我考虑过的另一种方法是反序列化为 string/string 字典,然后自己执行 class 的填充,考虑到 JSON.NET 可以做到这一点,这似乎是混乱且不必要的对我来说...只要我先知道 class。

我真的希望有一种简单的方法可以让 JSON.NET 通过检查 MessageName 属性 找出 class 名称,然后继续填充 class在检查了那个 属性.

感谢您的帮助!

JSON 只能反序列化为众所周知的 class。您需要指定数据布局(即 class/type)

有两种选择:

1.) 更深入一层。使用 JSON 令牌解析器从您的 JSON 流中读取令牌并根据您找到的令牌采取行动。

2.) 正如您所建议的:使用足够灵活的 class 布局来容纳所有可能的变体,例如 key/value 字典。