C# 从JSON.NET检索动态类名?
我正在使用JSON.NET通过网络接收消息。消息格式有些动态,因为消息将由许多不同的类表示,每个类都继承自父消息。例如:C# 从JSON.NET检索动态类名?,c#,.net,json,serialization,json.net,C#,.net,Json,Serialization,Json.net,我正在使用JSON.NET通过网络接收消息。消息格式有些动态,因为消息将由许多不同的类表示,每个类都继承自父消息。例如: { MessageName: "MessageType1", Data1: 124, Data2: "Something" } { MessageName: "MessageType2", OtherData: "Some data", MoreData: "Even more", ANumber: 25 } 我遇
{
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属性来找出类名,然后在检查该属性后继续填充类
谢谢你的帮助 JSON只能反序列化到已知的类中。您需要指定数据布局(即类/类型) 有两种选择: 1)更深一层。使用JSON令牌解析器从JSON流中读取令牌,并根据找到的令牌进行操作
2.)正如您所建议的:使用足够灵活的类布局来容纳所有可能的变体,如键/值字典。您可以使用dynamic关键字反序列化为动态对象,然后遍历属性以获得
MessageName
。谢谢,我最后使用了一个阅读器来读取MessageName令牌,然后使用反射获取类型,最后使用JSONConverter填充对象。比我真正想做的工作要多一些,但它至少可以工作,而不必求助于一些疯狂的双重编码传输格式。