开发者

DynamicObject and WCF support

开发者 https://www.devze.com 2022-12-27 23:47 出处:网络
I was wondering if anyone has had any luck getting a DynamicObject to serialize and work with WCF? Here’s my little test:

I was wondering if anyone has had any luck getting a DynamicObject to serialize and work with WCF?

Here’s my little test:

[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);

The error I get is:

System.Runtime.Serialization.InvalidDataContractException was unhandled Message=Type 'ElasticTest1.MyDynamicObject' cannot inherit from a type that is not marked with DataContractAttribute or SerializableAttribute. Consider marking the base type 'System.Dynamic.DynamicObject' with DataContractAttribute or SerializableAttribute, or removing them from the derived type.

Any suggestions?


Solution for your problem

Implement custom IDynamicMetaObjectProvider


Can you use something like Dictionary<TKey, TValue> to achieve this?

I am trying to solve a similar problem. My issue is that I have DTO's to transfer data between client and server. However, you should always have DTO's that are fine grained and flattened.

For example, if a client wants to get Customer's Name and ID and it is not interested in anything else, ideally, you should create a DTO that only has these 2 properties in it. If you were to transfer the same CustomerDTO for all methods, there is a lot of performance implications. You could be transferring a lot of redundant fields.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号