9

我想知道是否有人幸运地让 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”,或从派生类型中删除它们。

有什么建议么?

4

2 回答 2

10

解决您的问题

实施自定义IDynamicMetaObjectProvider

于 2011-04-19T10:26:10.923 回答
3

你可以使用类似的东西Dictionary<TKey, TValue>来实现这一目标吗?

我正在尝试解决类似的问题。我的问题是我有 DTO 在客户端和服务器之间传输数据。但是,您应该始终拥有细粒度和扁平化的 DTO。

例如,如果客户想要获取客户的姓名和 ID,并且对其他任何内容都不感兴趣,理想情况下,您应该创建一个仅包含这两个属性的 DTO。如果您要为所有方法传输相同的 CustomerDTO,则会对性能产生很多影响。您可能正在传输大量冗余字段。

于 2011-02-18T15:28:28.957 回答