将 ExpandoObject 发送到另一个 AppDomain

Send ExpandoObject to another AppDomain

我正在尝试将一个动态对象(类型 ExpandoObject)从主 AppDomain 发送到另一个,显然遇到了 ExpandoObject is not marked as serializable 异常。

此外,这个 ExpandoObject 有内部字典成员 (Dictionary <object, dynamic>) 满足我的需要。

我已经尝试使用 Json.Net (JObject) 将 ExpandoObject 转换为 Json,但是内部字典没有反序列化为数组,这给了我一个例外试图访问其属性。

有谁知道如何序列化动态对象并将其发送到另一个 AppDomain?

主 AppDomain 代码:

dynamic dynamicObj = expBuilder.GenerateDynamicObj();
ExpressionInMemory exp = (ExpressionInMemory)ExpressionDomain.CreateInstanceAndUnwrap(Assembly.GetExecutingAssembly().FullName, typeof(ExpressionInMemory).FullName);

exp.SetDynamicObj(dynamicObj);

备用 AppDomain 代码:

...
public void SetDynamicObj(dynamic obj)
{
  this._dynamicObj = obj;
}
...

简而言之,为了能够将具有与 Expando 对象相同行为的动态对象传递到另一个 AppDomain,我必须创建一个新的 class 来继承动态对象并实现所有 ISerializable和 IDictionary 函数。

工作完美。