daxnet / apworks-core

Apworks framework supporting .NET Core
Apache License 2.0
204 stars 60 forks source link

MessageJsonSerializer.DeserializeAsync 会抛异常 #7

Open SunriseChen opened 7 years ago

SunriseChen commented 7 years ago

在 v0.1.122 版本后,当调用 MessageJsonSerializer.DeserializeAsync() 方法的时候会抛出下面的异常: Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: Cannot implicitly convert type 'System.Threading.Tasks.Task<Newtonsoft.Json.Linq.JObject>' to 'System.Threading.Tasks.Task<object>' at CallSite.Target(Closure , CallSite , Object ) at Apworks.ObjectSerializer.DeserializeAsync(Byte[] data, CancellationToken cancellationToken) at Apworks.Serialization.Json.MessageJsonSerializer.<DeserializeAsync>d__4.MoveNext()

查看源码后应该是下面的代码引起的: public virtual Task<dynamic> DeserializeAsync(byte[] data, CancellationToken cancellationToken = default(CancellationToken)) => Task.FromResult(Deserialize(data)); 估计是 Task.FromResult() 不能处理 dynamic 类型引起的。

daxnet commented 6 years ago

是的,这个问题在之前的版本存在,原因是Deserialize返回的dynamic类型其实是JObject类型,它无法被反序列化成一个具体的对象模型。现在应该已经修复了。