我无法反序列化客户端上的JSON数据。它接收JSON数据是这样的:客户端上的Json反序列化类结构
{
"WaitForClientMessagesResult": [
{
"__type": "KeepAliveMessage:#Data.WebGateway",
"MessageId": 1,
"Type": 0,
"PositionInQueue": -1
}
]
}
KeepAliveMessage
是派生类的WebResponseMessage
。该服务返回IEnumerable<WebResponseMessage>
。
我得到的例外是这样的:
Newtonsoft.Json.JsonSerializationException:
不能反序列化JSON当前对象(例如{ “名”: “值”})到 型“ System.Collections.Generic.IEnumerable`1 [ Red5Prototype.Models.WaitForClientMessagesResult]
因为该类型需要JSON数组(例如[1,2,3])才能正确地反序列化。
我试图调用反序列化方法很多:
WaitForClientMessagesResult deserialized = JsonConvert.DeserializeObject<WaitForClientMessagesResult>(keepAliveResult);
WaitForClientMessagesResult[] deserialized = JsonConvert.DeserializeObject<WaitForClientMessagesResult[]>(keepAliveResult);
IEnumerable<WebClientMessage> deserialized = JsonConvert.DeserializeObject<IEnumerable<WebClientMessage>>(keepAliveResult);
无如果这些工作。
我不知道如何构建我的客户端上的类来使用Json解串器。
编辑: 我的基类定义是这样的:
[KnownType(typeof(KeepAliveMessage))]
[DataContract]
public abstract class WebClientMessage
{
public WebClientMessage() { }
[DataMember]
public int MessageId { get; set; }
[DataMember]
public WebClientMessageType Type { get; set; }
}
与保持连接是这样的:
[DataContract]
public class KeepAliveMessage : WebClientMessage
{
public KeepAliveMessage() { }
[DataMember]
public int PositionInQueue { get; set; }
}
我试图使WebClientMessage
的成员WaitForClientMessagesResult
[DataContract]
public class WaitForClientMessagesResult
{
public WaitForClientMessagesResult() {}
[DataMember]
WebClientMessage [] Messages;
}
这也没有效果。
显示我们WaitForClientMessagesResult'是如何'声明。 –
你需要使用'__type'属性吗?如果是的话,这会变得更复杂 –
__type字段来自web服务,我不能改变。它使用.NET序列化。 – tatmanblue