从JSON.NET检索动态类名?

时间:2015-03-16 16:32:18

标签: c# .net json serialization json.net

我正在使用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属性找出一个类名,然后在检查一个属性后继续填充一个类。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

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

有两种选择:

1。)更深入一级。使用JSON令牌解析器从JSON流中读取令牌,并根据您找到的令牌进行操作。

2。)如你所知:使用足够灵活的类布局来保存所有可能的变体,如键/值字典。