错误信息为:
“object”未包含Date的定义。
“Unhandled Exception: Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: ‘object’ does not contain a definition for ‘Value’”
查了资料,原因是匿名类的属性访问权限是internal,只有在同一程序集(Assembly)中才能使用。一旦跨程序集使用,则会出现无法访问的错误。所以dynamic在跨程序集的使用场景中,受到很多的限制。(匿名方法可能也有这样的情况,未证实)。
但我发现,这里有个有意思的情况。虽然跨程序集无法直接调用属性,但是dynamic的数据确实传递过来了。
解决方法
// 收到dynamic的msg后,先序列化成json字符串,然后在将json字符串反序列化成dynamic类型。
var json = JsonConvert.SerializeObject(msg, Formatting.Indented);
var newMsg = JsonConvert.DeserializeObject(json);