我正在使用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可以为我做到这一点......因为我先了解课程。
我真的希望有一种简单的方法让JSON.NET通过检查MessageName属性找出一个类名,然后在检查一个属性后继续填充一个类。
感谢您的帮助!
答案 0 :(得分:1)
JSON只能反序列化为一个众所周知的类。您需要指定数据布局(即类/类型)
有两种选择:
1。)更深入一级。使用JSON令牌解析器从JSON流中读取令牌,并根据您找到的令牌进行操作。
2。)如你所知:使用足够灵活的类布局来保存所有可能的变体,如键/值字典。