从 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 字典。
我正在使用 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 字典。