apworks-core icon indicating copy to clipboard operation
apworks-core copied to clipboard

MessageJsonSerializer.DeserializeAsync 会抛异常

Open SunriseChen opened this issue 7 years ago • 1 comments

在 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 类型引起的。

SunriseChen avatar Sep 30 '17 13:09 SunriseChen

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

daxnet avatar Oct 22 '17 00:10 daxnet