Поддержка DynamicObject и WCF - PullRequest
       20

Поддержка DynamicObject и WCF

9 голосов
/ 20 апреля 2010

Мне было интересно, кому-нибудь повезло, если бы 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 не обработано Сообщение = тип 'ElasticTest1.MyDynamicObject' не может наследоваться от типа, который не помечен как DataContractAttribute или SerializableAttribute Попробуйте пометить базовый тип System.Dynamic.DynamicObject с помощью DataContractAttribute или SerializableAttribute или удалить их из производного типа.

Есть предложения?

Ответы [ 2 ]

10 голосов
/ 19 апреля 2011

Решение вашей проблемы

Реализация пользовательских IDynamicMetaObjectProvider

3 голосов
/ 18 февраля 2011

Можете ли вы использовать что-то вроде Dictionary<TKey, TValue> для достижения этой цели?

Я пытаюсь решить подобную проблему. Моя проблема в том, что у меня есть DTO для передачи данных между клиентом и сервером. Однако у вас всегда должны быть мелкозернистые и сплющенные DTO.

Например, если клиент хочет получить имя и идентификатор клиента и его больше ничего не интересует, в идеале следует создать DTO, в котором есть только эти 2 свойства. Если бы вы передавали один и тот же CustomerDTO для всех методов, это сильно сказывается на производительности. Вы могли бы передавать много избыточных полей.

...