錯誤信息爲(wéi / wèi):
“object”未包含Date的(de)定義。
“Unhandled Exception: Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: ‘object’ does not contain a definition for ‘Value’”
查了(le/liǎo)資料,原因是(shì)匿名類的(de)屬性訪問權限是(shì)internal,隻有在(zài)同一程序集(Assembly)中才能使用。一旦跨程序集使用,則會出(chū)現無法訪問的(de)錯誤。所以(yǐ)dynamic在(zài)跨程序集的(de)使用場景中,受到(dào)很多的(de)限制。(匿名方法可能也(yě)有這(zhè)樣的(de)情況,未證實)。
但我發現,這(zhè)裏有個(gè)有意思的(de)情況。雖然跨程序集無法直接調用屬性,但是(shì)dynamic的(de)數據确實傳遞過來(lái)了(le/liǎo)。
解決方法
// 收到(dào)dynamic的(de)msg後,先序列化成json字符串,然後在(zài)将json字符串反序列化成dynamic類型。
var json = JsonConvert.SerializeObject(msg, Formatting.Indented);
var newMsg = JsonConvert.DeserializeObject(json);