【发布时间】:2012-10-03 22:10:20
【问题描述】:
我想知道是否有人幸运地让 DynamicObject 序列化并使用 WCF?
这是我的小测试:
[DataContract]
class MyDynamicObject : DynamicObject
{
[DataMember]
private Dictionary<string, object> _attributes =
new Dictionary<string, object>();
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
string key = binder.Name;
result = null;
if (_attributes.ContainsKey(key))
result = _attributes[key];
return true;
}
public override bool TrySetMember(SetMemberBinder binder, object value)
{
_attributes.Add(binder.Name, value);
return true;
}
}
var dy = new MyDynamicObject();
var ser = new DataContractSerializer(typeof(MyDynamicObject));
var mem = new MemoryStream();
ser.WriteObject(mem, dy);
我得到的错误是:
System.Runtime.Serialization.InvalidDataContractException 未处理 Message=Type 'ElasticTest1.MyDynamicObject' 不能从未用 DataContractAttribute 或 SerializableAttribute 标记的类型继承。考虑使用 DataContractAttribute 或 SerializableAttribute 标记基类型“System.Dynamic.DynamicObject”,或从派生类型中删除它们。
有什么建议吗?
【问题讨论】:
-
错误消息告诉您,除非您更改 System.Dynamic.DynamicObject,否则您不能这样做,因为它是 .NET Framework 的一部分。所以你不能这样做。你想达到什么目标,也许有不同的方法可以实现相同的目标?
-
当然,虽然您不能更改 DynamicObject,但它是开源的 (dlr.codeplex.com),因此您可以复制和修改它。
-
我正在尝试将 DynamicObject 通过线路发送到 SL 4 客户端。
-
(不,不会这样)
-
我很好奇您为什么选择使用动态对象序列化到 SL 客户端。你的对象代表什么:来自数据库的数据,还是完全不同的东西?是什么让您的数据动态化?
标签: c# c#-4.0 dynamic-language-runtime