我正在使用 JSON.NET 通过网络接收消息。消息格式在某种程度上是动态的,因为消息将由许多不同的类表示,每个类都继承自父消息。例如:
{
MessageName: "MessageType1",
Data1: 124,
Data2: "Something"
}
{
MessageName: "MessageType2",
OtherData: "Some data",
MoreData: "Even more",
ANumber: 25
}
我遇到的问题是,在 JSON.NET 中,我不知道如何找出类的名称(MessageType1/MessageType2/etc),以便将其反序列化为类的实例而不反序列化两次。我考虑过几种选择;我目前使用的一个是使用一个包含消息名称和序列化为字符串的实际 JSON 消息的容器类,但这似乎很浪费。
我考虑过的另一种方法是反序列化为字符串/字符串字典,然后自己执行类的填充,考虑到 JSON.NET 可以为我做到这一点,这似乎很混乱和不必要的......只要我先知道班级。
我真的希望有一种简单的方法可以通过检查 MessageName 属性来找出类名 JSON.NET 然后在检查该属性后继续填充类。
感谢您的帮助!
JSON 只能反序列化为已知类。您需要指定数据布局(即类/类型)
有两种选择:
1.)更深入一层。使用 JSON 令牌解析器从 JSON 流中读取令牌,并根据找到的令牌执行操作。
2.)正如你所建议的:使用足够灵活的类布局来容纳所有可能的变体,如键/值字典。