[C#学习笔记] – dynamic跨程序集无法获取匿名类属性的思考及解决方案

错误信息为:
“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);

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注