将 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 函数。
工作完美。
我正在尝试将一个动态对象(类型 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 函数。
工作完美。